diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out index 13e4a6fb4c..d39aa45373 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.out @@ -829,51 +829,51 @@ DROP SERVER fdtest; DROP FOREIGN DATA WRAPPER postgresql; -- test asynchronous notifications SELECT dblink_connect('dbname=contrib_regression'); - dblink_connect + dblink_connect ---------------- OK (1 row) --should return listen SELECT dblink_exec('LISTEN regression'); - dblink_exec + dblink_exec ------------- LISTEN (1 row) --should return listen SELECT dblink_exec('LISTEN foobar'); - dblink_exec + dblink_exec ------------- LISTEN (1 row) SELECT dblink_exec('NOTIFY regression'); - dblink_exec + dblink_exec ------------- NOTIFY (1 row) SELECT dblink_exec('NOTIFY foobar'); - dblink_exec + dblink_exec ------------- NOTIFY (1 row) SELECT notify_name, be_pid = (select t.be_pid from dblink('select pg_backend_pid()') as t(be_pid int)) AS is_self_notify, extra from dblink_get_notify(); - notify_name | is_self_notify | extra + notify_name | is_self_notify | extra -------------+----------------+------- - regression | t | - foobar | t | + regression | t | + foobar | t | (2 rows) SELECT * from dblink_get_notify(); - notify_name | be_pid | extra + notify_name | be_pid | extra -------------+--------+------- (0 rows) SELECT dblink_disconnect(); - dblink_disconnect + dblink_disconnect ------------------- OK (1 row) diff --git a/contrib/pgcrypto/expected/crypt-blowfish.out b/contrib/pgcrypto/expected/crypt-blowfish.out index 329d78f625..8a8b007181 100644 --- a/contrib/pgcrypto/expected/crypt-blowfish.out +++ b/contrib/pgcrypto/expected/crypt-blowfish.out @@ -17,7 +17,7 @@ CREATE TABLE ctest (data text, res text, salt text); INSERT INTO ctest VALUES ('password', '', ''); UPDATE ctest SET salt = gen_salt('bf', 8); UPDATE ctest SET res = crypt(data, salt); -SELECT res = crypt(data, res) AS "worked" +SELECT res = crypt(data, res) AS "worked" FROM ctest; worked -------- diff --git a/contrib/pgcrypto/expected/pgp-armor.out b/contrib/pgcrypto/expected/pgp-armor.out index 1bb2461596..c95549412e 100644 --- a/contrib/pgcrypto/expected/pgp-armor.out +++ b/contrib/pgcrypto/expected/pgp-armor.out @@ -6,21 +6,21 @@ SET bytea_output TO escape; select armor(''); armor ----------------------------- - -----BEGIN PGP MESSAGE----- - - =twTO - -----END PGP MESSAGE----- + -----BEGIN PGP MESSAGE-----+ + + + =twTO + + -----END PGP MESSAGE----- + (1 row) select armor('test'); armor ----------------------------- - -----BEGIN PGP MESSAGE----- - - dGVzdA== - =+G7Q - -----END PGP MESSAGE----- + -----BEGIN PGP MESSAGE-----+ + + + dGVzdA== + + =+G7Q + + -----END PGP MESSAGE----- + (1 row) @@ -40,12 +40,12 @@ select armor('0123456789abcdef0123456789abcdef0123456789abcdef 0123456789abcdef0123456789abcdef0123456789abcdef'); armor ------------------------------------------------------------------------------ - -----BEGIN PGP MESSAGE----- - - MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmCjAxMjM0NTY3 - ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZg== - =JFw5 - -----END PGP MESSAGE----- + -----BEGIN PGP MESSAGE----- + + + + MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmCjAxMjM0NTY3+ + ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZg== + + =JFw5 + + -----END PGP MESSAGE----- + (1 row) diff --git a/contrib/pgcrypto/expected/pgp-decrypt.out b/contrib/pgcrypto/expected/pgp-decrypt.out index 8ecb56f009..859f4d681b 100644 --- a/contrib/pgcrypto/expected/pgp-decrypt.out +++ b/contrib/pgcrypto/expected/pgp-decrypt.out @@ -11,7 +11,7 @@ yA6Ce1QTMK3KdL2MPfamsTUSAML8huCJMwYQFfE= =JcP+ -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -25,7 +25,7 @@ UTAsG35A1vYs02VARKzGz6xI2UHwFUirP+brPBg3Ee7muOx8pA== =XtrP -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -39,7 +39,7 @@ jA0ECAMCI7YQpWqp3D1g0kQBCjB7GlX7+SQeXNleXeXQ78ZAPNliquGDq9u378zI =rCZt -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -53,7 +53,7 @@ lceMfQdbAg6oTFyJpk/wH18GzRDphCofg0X8uLgkAKMrpcmgog== =fB6S -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -68,7 +68,7 @@ u9YkgfJfsuRJmgQ9tmo= =60ui -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -82,7 +82,7 @@ jA0EBwMCEeP3idNjQ1Bg0kQBf4G0wX+2QNzLh2YNwYkQgQkfYhn/hLXjV4nK9nsE =moGf -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -97,7 +97,7 @@ KyRrHf7zEBuZiZ2AG34jNVMOLToj1jJUg5zTSdecUzQVCykWTA== =NyLk -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -111,7 +111,7 @@ jA0EBwMCApbdlrURoWJg0kQBzHM/E0o7djY82bNuspjxjAcPFrrtp0uvDdMQ4z2m =FxbQ -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -126,7 +126,7 @@ Ah9GXjGS1TVALzTImJbz1uHUZRfhJlFbc5yGQw== =YvkV -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -140,7 +140,7 @@ jAwEBwEC/QTByBLI3b/SRAHPxKzI6SZBo5lAEOD+EsvKQWO4adL9tDY+++Iqy1xK =dbXm -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -154,7 +154,7 @@ z+9ZaA/XdSx5ZiFnMym8P6r8uY9rLjjNptvvRHlxIReF+p9MNg== =VJKg -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -168,7 +168,7 @@ Cr3i2M7TgVZ0M4jp4QL0adG1lpN5iK7aQeOwMw== =cg+i -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -182,7 +182,7 @@ jAwECAECruOfyNDFiTnSRAEVoGXm4A9UZKkWljdzjEO/iaE7mIraltIpQMkiqCh9 =aHmC -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -196,7 +196,7 @@ q6eF6859ZVnli3BFSDSk3a4e/pXhglxmDYCfjAXkozKNYLo6yw== =K0LS -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -210,7 +210,7 @@ rQr3WbdKdY9ufjOE5+mXI+EFkSPrF9rL9NCq6w== =RGts -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -224,7 +224,7 @@ jAwECQECKHhrou7ZOIXSRAHWIVP+xjVQcjAVBTt+qh9SNzYe248xFTwozkwev3mO =SUrU -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -238,7 +238,7 @@ jA0ECQMCjc8lwZu8Fz1g0kQBkEzjImi21liep5jj+3dAJ2aZFfUkohi8b3n9z+7+ =XZrG -----END PGP MESSAGE----- '), 'foobar'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -253,7 +253,7 @@ tTGup1mMz6Cfh1uDRErUuXpx9A0gdMu7zX0o5XjrL7WGDAZdSw== =XKKG -----END PGP MESSAGE----- '), '0123456789abcdefghij'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -267,7 +267,7 @@ CMxFKadf144H/vpoV9GA0f22keQgCl0EsTE4V4lweVOPTKCMJg== =gWDh -----END PGP MESSAGE----- '), '0123456789abcdefghij2jk4h5g2j54khg23h54g2kh54g2khj54g23hj54'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) @@ -281,7 +281,7 @@ FwsDabdQUz5O7bgNSnxfmyw1OifGF+W2bIn/8W+0rDf8u3+O+Q== =OxOF -----END PGP MESSAGE----- '), 'x'); - pgp_sym_decrypt + pgp_sym_decrypt ----------------- Secret message. (1 row) diff --git a/contrib/tsearch2/expected/tsearch2.out b/contrib/tsearch2/expected/tsearch2.out index d5623e1cdb..22d3e3e402 100644 --- a/contrib/tsearch2/expected/tsearch2.out +++ b/contrib/tsearch2/expected/tsearch2.out @@ -742,8 +742,8 @@ select * from parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc 3 | ewri2 12 | 13 | - 12 | - : + 12 | + + | 19 | /usr/local/fff 12 | 19 | /awdf/dwqe/4325 @@ -775,8 +775,8 @@ select * from parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc 20 | -4.2 12 | . 22 | 234 - 12 | - : + 12 | + + | 12 | < 1 | i 12 | @@ -2330,8 +2330,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('sea&thousand&years')); headline -------------------------------------------- - sea a thousand years, - A thousand years to trace + sea a thousand years,+ + A thousand years to trace + The granite features of this cliff (1 row) @@ -2347,8 +2347,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('granite&sea')); headline ------------------------------------------- - sea a thousand years, - A thousand years to trace + sea a thousand years, + + A thousand years to trace + The granite features of this cliff (1 row) @@ -2364,8 +2364,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('sea')); headline ------------------------------------ - sea a thousand years, - A thousand years to trace + sea a thousand years, + + A thousand years to trace + The granite features of this cliff (1 row) @@ -2384,17 +2384,17 @@ ff-bg to_tsquery('sea&foo'), 'HighlightAll=true'); headline ----------------------------------------------------------------------------- - - - - - Sea view wow foo bar qq - YES   - ff-bg - - + + + + + + + + + Sea view wow foo bar qq + + YES  + + ff-bg + + + + + (1 row) diff --git a/contrib/tsearch2/expected/tsearch2_1.out b/contrib/tsearch2/expected/tsearch2_1.out index e956b07646..f5713f5024 100644 --- a/contrib/tsearch2/expected/tsearch2_1.out +++ b/contrib/tsearch2/expected/tsearch2_1.out @@ -742,8 +742,8 @@ select * from parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc 3 | ewri2 12 | 13 | - 12 | - : + 12 | + + | 19 | /usr/local/fff 12 | 19 | /awdf/dwqe/4325 @@ -775,8 +775,8 @@ select * from parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.werc 20 | -4.2 12 | . 22 | 234 - 12 | - : + 12 | + + | 12 | < 1 | i 12 | @@ -2330,8 +2330,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('sea&thousand&years')); headline -------------------------------------------- - sea a thousand years, - A thousand years to trace + sea a thousand years,+ + A thousand years to trace + The granite features of this cliff (1 row) @@ -2347,8 +2347,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('granite&sea')); headline ------------------------------------------- - sea a thousand years, - A thousand years to trace + sea a thousand years, + + A thousand years to trace + The granite features of this cliff (1 row) @@ -2364,8 +2364,8 @@ Upon a woman s face. E. J. Pratt (1882 1964) ', to_tsquery('sea')); headline ------------------------------------ - sea a thousand years, - A thousand years to trace + sea a thousand years, + + A thousand years to trace + The granite features of this cliff (1 row) @@ -2384,17 +2384,17 @@ ff-bg to_tsquery('sea&foo'), 'HighlightAll=true'); headline ----------------------------------------------------------------------------- - - - - - Sea view wow foo bar qq - YES   - ff-bg - - + + + + + + + + + Sea view wow foo bar qq + + YES  + + ff-bg + + + + + (1 row) diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index bbccb3b87b..95ce850195 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -1765,30 +1765,54 @@ lo_import 152801 Sets the border line drawing style to one - of ascii or unicode. + of ascii, old-ascii + or unicode. Unique abbreviations are allowed. (That would mean one letter is enough.) - ASCII uses plain ASCII characters. + ascii style uses plain ASCII + characters. Newlines in data are shown using + a + symbol in the right-hand margin. + When the data wraps from one line + to the next without a newline character, a dot (.) + is shown in the right-hand margin of the first line, and + again in the left-hand margin of the following line. - Unicode uses Unicode box-drawing characters. + old-ascii style uses plain ASCII + characters, using the formatting style used + in PostgreSQL 8.4 and earlier. + Newlines in data are shown using a : + symbol in place of the left-hand column separator. + When the data wraps from one line + to the next without a newline character, a ; + symbol is used in place of the left-hand column separator. + + + + unicode style uses Unicode box-drawing characters. + Newlines in data are shown using a carriage return symbol + in the right-hand margin. When the data wraps from one line + to the next without a newline character, an ellipsis symbol + is shown in the right-hand margin of the first line, and + again in the left-hand margin of the following line. When the selected output format is one that draws lines or boxes - around the data, this setting controls how the lines are drawn. + around the data, this setting also determines the characters + with which the lines are drawn. Plain ASCII characters work everywhere, but Unicode characters look nicer on displays that recognize them. - If this option has not been set, the default behavior is to - use Unicode characters if the client character set encoding - is UTF-8, otherwise ASCII characters. + If this option has not been set, the default behavior is to use + unicode style if the client character set encoding + is UTF-8, otherwise ascii style. diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 6ce10caa2b..5a356b9b5e 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.210 2009/10/13 21:04:01 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.211 2009/11/22 05:20:41 tgl Exp $ */ #include "postgres_fe.h" #include "command.h" @@ -1795,11 +1795,13 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) ; else if (pg_strncasecmp("ascii", value, vallen) == 0) popt->topt.line_style = &pg_asciiformat; + else if (pg_strncasecmp("old-ascii", value, vallen) == 0) + popt->topt.line_style = &pg_asciiformat_old; else if (pg_strncasecmp("unicode", value, vallen) == 0) popt->topt.line_style = &pg_utf8format; else { - psql_error("\\pset: allowed line styles are ascii, unicode\n"); + psql_error("\\pset: allowed line styles are ascii, old-ascii, unicode\n"); return false; } diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c index 80dd304f1e..b7fdc47794 100644 --- a/src/bin/psql/print.c +++ b/src/bin/psql/print.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.117 2009/10/13 21:04:01 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.118 2009/11/22 05:20:41 tgl Exp $ */ #include "postgres_fe.h" @@ -54,9 +54,37 @@ const printTextFormat pg_asciiformat = { "-", "+", "+", "+" }, { "", "|", "|", "|" } }, + "|", + "|", + "|", + " ", + "+", + " ", + "+", + ".", + ".", + true +}; + +const printTextFormat pg_asciiformat_old = +{ + "old-ascii", + { + { "-", "+", "+", "+" }, + { "-", "+", "+", "+" }, + { "-", "+", "+", "+" }, + { "", "|", "|", "|" } + }, ":", ";", - " " + " ", + "+", + " ", + " ", + " ", + " ", + " ", + false }; const printTextFormat pg_utf8format = @@ -72,12 +100,23 @@ const printTextFormat pg_utf8format = /* N/A, │, │, │ */ { "", "\342\224\202", "\342\224\202", "\342\224\202" } }, - /* ╎ */ - "\342\225\216", - /* ┊ */ - "\342\224\212", - /* ╷ */ - "\342\225\267" + /* │ */ + "\342\224\202", + /* │ */ + "\342\224\202", + /* │ */ + "\342\224\202", + " ", + /* ↵ */ + "\342\206\265", + " ", + /* ↵ */ + "\342\206\265", + /* … */ + "\342\200\246", + /* … */ + "\342\200\246", + true }; @@ -476,6 +515,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) bool *header_done; /* Have all header lines been output? */ int *bytes_output; /* Bytes output for column value */ + printTextLineWrap *wrap; /* Wrap status for each column */ int output_columns = 0; /* Width of interactive console */ bool is_pager = false; @@ -499,6 +539,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) format_buf = pg_local_calloc(col_count, sizeof(*format_buf)); header_done = pg_local_calloc(col_count, sizeof(*header_done)); bytes_output = pg_local_calloc(col_count, sizeof(*bytes_output)); + wrap = pg_local_calloc(col_count, sizeof(*wrap)); } else { @@ -513,6 +554,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) format_buf = NULL; header_done = NULL; bytes_output = NULL; + wrap = NULL; } /* scan all column headers, find maximum width and max max_nl_lines */ @@ -575,7 +617,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) /* adjust the total display width based on border style */ if (opt_border == 0) - width_total = col_count - 1; + width_total = col_count; else if (opt_border == 1) width_total = col_count * 3 - 1; else @@ -770,16 +812,18 @@ print_aligned_text(const printTableContent *cont, FILE *fout) while (more_col_wrapping) { if (opt_border == 2) - fprintf(fout, "%s%c", dformat->leftvrule, - curr_nl_line ? '+' : ' '); - else if (opt_border == 1) - fputc(curr_nl_line ? '+' : ' ', fout); + fputs(dformat->leftvrule, fout); for (i = 0; i < cont->ncolumns; i++) { struct lineptr *this_line = col_lineptrs[i] + curr_nl_line; unsigned int nbspace; + if (opt_border != 0 || + (format->wrap_right_border == false && i > 0)) + fputs(curr_nl_line ? format->header_nl_left : " ", + fout); + if (!header_done[i]) { nbspace = width_wrap[i] - this_line->width; @@ -796,21 +840,18 @@ print_aligned_text(const printTableContent *cont, FILE *fout) } else fprintf(fout, "%*s", width_wrap[i], ""); - if (i < col_count - 1) - { - if (opt_border == 0) - fputc(curr_nl_line ? '+' : ' ', fout); - else - fprintf(fout, " %s%c", dformat->midvrule, - curr_nl_line ? '+' : ' '); - } + + if (opt_border != 0 || format->wrap_right_border == true) + fputs(!header_done[i] ? format->header_nl_right : " ", + fout); + + if (opt_border != 0 && i < col_count - 1) + fputs(dformat->midvrule, fout); } curr_nl_line++; if (opt_border == 2) - fprintf(fout, " %s", dformat->rightvrule); - else if (opt_border == 1) - fputc(' ', fout); + fputs(dformat->rightvrule, fout); fputc('\n', fout); } @@ -861,9 +902,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) /* left border */ if (opt_border == 2) - fprintf(fout, "%s ", dformat->leftvrule); - else if (opt_border == 1) - fputc(' ', fout); + fputs(dformat->leftvrule, fout); /* for each column */ for (j = 0; j < col_count; j++) @@ -874,6 +913,17 @@ print_aligned_text(const printTableContent *cont, FILE *fout) int chars_to_output = width_wrap[j]; bool finalspaces = (opt_border == 2 || j < col_count - 1); + /* Print left-hand wrap or newline mark */ + if (opt_border != 0) + { + if (wrap[j] == PRINT_LINE_WRAP_WRAP) + fputs(format->wrap_left, fout); + else if (wrap[j] == PRINT_LINE_WRAP_NEWLINE) + fputs(format->nl_left, fout); + else + fputc(' ', fout); + } + if (!this_line->ptr) { /* Past newline lines so just pad for other columns */ @@ -908,8 +958,6 @@ print_aligned_text(const printTableContent *cont, FILE *fout) /* spaces second */ fprintf(fout, "%.*s", bytes_to_output, this_line->ptr + bytes_output[j]); - if (finalspaces) - fprintf(fout, "%*s", width_wrap[j] - chars_to_output, ""); } bytes_output[j] += bytes_to_output; @@ -927,29 +975,54 @@ print_aligned_text(const printTableContent *cont, FILE *fout) } } - /* print a divider, if not the last column */ - if (j < col_count - 1) + /* Determine next line's wrap status for this column */ + wrap[j] = PRINT_LINE_WRAP_NONE; + if (col_lineptrs[j][curr_nl_line[j]].ptr != NULL) { - if (opt_border == 0) - fputc(' ', fout); - /* Next value is beyond past newlines? */ + if (bytes_output[j] != 0) + wrap[j] = PRINT_LINE_WRAP_WRAP; + else if (curr_nl_line[j] != 0) + wrap[j] = PRINT_LINE_WRAP_NEWLINE; + } + + /* + * If left-aligned, pad out remaining space if needed (not + * last column, and/or wrap marks required). + */ + if (cont->aligns[j] != 'r') /* Left aligned cell */ + { + if (finalspaces || + wrap[j] == PRINT_LINE_WRAP_WRAP || + wrap[j] == PRINT_LINE_WRAP_NEWLINE) + fprintf(fout, "%*s", + width_wrap[j] - chars_to_output, ""); + } + + /* Print right-hand wrap or newline mark */ + if (wrap[j] == PRINT_LINE_WRAP_WRAP) + fputs(format->wrap_right, fout); + else if (wrap[j] == PRINT_LINE_WRAP_NEWLINE) + fputs(format->nl_right, fout); + else if (opt_border == 2 || j < col_count - 1) + fputc(' ', fout); + + /* Print column divider, if not the last column */ + if (opt_border != 0 && j < col_count - 1) + { + if (wrap[j+1] == PRINT_LINE_WRAP_WRAP) + fputs(format->midvrule_wrap, fout); + else if (wrap[j+1] == PRINT_LINE_WRAP_NEWLINE) + fputs(format->midvrule_nl, fout); else if (col_lineptrs[j + 1][curr_nl_line[j + 1]].ptr == NULL) - fprintf(fout, " %s ", format->midvrule_blank); - /* In wrapping of value? */ - else if (bytes_output[j + 1] != 0) - fprintf(fout, " %s ", format->midvrule_wrap); - /* After first newline value */ - else if (curr_nl_line[j + 1] != 0) - fprintf(fout, " %s ", format->midvrule_cont); - /* Ordinary line */ + fputs(format->midvrule_blank, fout); else - fprintf(fout, " %s ", dformat->midvrule); + fputs(dformat->midvrule, fout); } } /* end-of-row border */ if (opt_border == 2) - fprintf(fout, " %s", dformat->rightvrule); + fputs(dformat->rightvrule, fout); fputc('\n', fout); } while (more_lines); @@ -1196,9 +1269,7 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout) fprintf(fout, "%*s", hwidth, ""); if (opt_border > 0) - fprintf(fout, " %s ", - (line_count == 0) ? - format->midvrule_cont : dformat->midvrule); + fprintf(fout, " %s ", dformat->midvrule); else fputc(' ', fout); diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h index b09aac90f7..30df35d115 100644 --- a/src/bin/psql/print.h +++ b/src/bin/psql/print.h @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2009, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/print.h,v 1.41 2009/10/13 21:04:01 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/print.h,v 1.42 2009/11/22 05:20:41 tgl Exp $ */ #ifndef PRINT_H #define PRINT_H @@ -41,14 +41,30 @@ typedef enum printTextRule PRINT_RULE_DATA /* data line (hrule is unused here) */ } printTextRule; +typedef enum printTextLineWrap +{ + /* Line wrapping conditions */ + PRINT_LINE_WRAP_NONE, /* No wrapping */ + PRINT_LINE_WRAP_WRAP, /* Wraparound due to overlength line */ + PRINT_LINE_WRAP_NEWLINE /* Newline in data */ +} printTextLineWrap; + typedef struct printTextFormat { /* A complete line style */ const char *name; /* for display purposes */ printTextLineFormat lrule[4]; /* indexed by enum printTextRule */ - const char *midvrule_cont; /* vertical line for continue after newline */ + const char *midvrule_nl; /* vertical line for continue after newline */ const char *midvrule_wrap; /* vertical line for wrapped data */ const char *midvrule_blank; /* vertical line for blank data */ + const char *header_nl_left; /* left mark after newline */ + const char *header_nl_right; /* right mark for newline */ + const char *nl_left; /* left mark after newline */ + const char *nl_right; /* right mark for newline */ + const char *wrap_left; /* left mark after wrapped data */ + const char *wrap_right; /* right mark for wrapped data */ + bool wrap_right_border; /* use right-hand border for wrap marks + * when border=0? */ } printTextFormat; typedef struct printTableOpt @@ -125,6 +141,7 @@ typedef struct printQueryOpt extern const printTextFormat pg_asciiformat; +extern const printTextFormat pg_asciiformat_old; extern const printTextFormat pg_utf8format; diff --git a/src/test/regress/expected/create_cast.out b/src/test/regress/expected/create_cast.out index 67eaab2316..56cd86e00b 100644 --- a/src/test/regress/expected/create_cast.out +++ b/src/test/regress/expected/create_cast.out @@ -53,7 +53,7 @@ SELECT casttestfunc('foo'::text); -- Should work now SELECT 1234::int4::casttesttype; -- No cast yet, should fail ERROR: cannot cast type integer to casttesttype LINE 1: SELECT 1234::int4::casttesttype; - ^ + ^ CREATE CAST (int4 AS casttesttype) WITH INOUT; SELECT 1234::int4::casttesttype; -- Should work now casttesttype diff --git a/src/test/regress/expected/dependency.out b/src/test/regress/expected/dependency.out index 6eb851a378..d0895fbd52 100644 --- a/src/test/regress/expected/dependency.out +++ b/src/test/regress/expected/dependency.out @@ -71,9 +71,9 @@ RESET SESSION AUTHORIZATION; Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+----------+-------+--------------------------------------------------+-------------------------- - public | deptest1 | table | regression_user0=arwdDxt/regression_user0 | - : regression_user1=a*r*w*d*D*x*t*/regression_user0 - : regression_user2=arwdDxt/regression_user1 + public | deptest1 | table | regression_user0=arwdDxt/regression_user0 +| + | | | regression_user1=a*r*w*d*D*x*t*/regression_user0+| + | | | regression_user2=arwdDxt/regression_user1 | (1 row) DROP OWNED BY regression_user1; diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out index f8dd6e8773..bb3d167a2b 100644 --- a/src/test/regress/expected/foreign_data.out +++ b/src/test/regress/expected/foreign_data.out @@ -366,14 +366,14 @@ GRANT USAGE ON FOREIGN SERVER s6 TO regress_test_role2 WITH GRANT OPTION; List of foreign servers Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options ------+-------------------+----------------------+-----------------------------------------+--------+---------+------------------------------ - s1 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 1.0 | {servername=s1} - : regress_test_role=U/foreign_data_user + s1 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user +| | 1.0 | {servername=s1} + | | | regress_test_role=U/foreign_data_user | | | s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b} s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521} s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b} s5 | foreign_data_user | foo | | | 15.0 | - s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 16.0 | {host=a,dbname=b} - : regress_test_role2=U*/foreign_data_user + s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user +| | 16.0 | {host=a,dbname=b} + | | | regress_test_role2=U*/foreign_data_user | | | s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b} s8 | foreign_data_user | postgresql | | | | {host=localhost,dbname=s8db} t1 | regress_test_role | foo | | | | @@ -417,14 +417,14 @@ access to foreign-data wrapper foo List of foreign servers Name | Owner | Foreign-data wrapper | Access privileges | Type | Version | Options ------+-----------------------+----------------------+-----------------------------------------+--------+---------+--------------------------------- - s1 | regress_test_indirect | foo | foreign_data_user=U/foreign_data_user | | 1.1 | {servername=s1} - : regress_test_role=U/foreign_data_user + s1 | regress_test_indirect | foo | foreign_data_user=U/foreign_data_user +| | 1.1 | {servername=s1} + | | | regress_test_role=U/foreign_data_user | | | s2 | foreign_data_user | foo | | | 1.1 | {host=a,dbname=b} s3 | foreign_data_user | foo | | oracle | | {tnsname=orcl,port=1521} s4 | foreign_data_user | foo | | oracle | | {host=a,dbname=b} s5 | foreign_data_user | foo | | | 15.0 | - s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user | | 16.0 | {host=a,dbname=b} - : regress_test_role2=U*/foreign_data_user + s6 | foreign_data_user | foo | foreign_data_user=U/foreign_data_user +| | 16.0 | {host=a,dbname=b} + | | | regress_test_role2=U*/foreign_data_user | | | s7 | foreign_data_user | foo | | oracle | 17.0 | {host=a,dbname=b} s8 | foreign_data_user | postgresql | | | | {dbname=db1,connect_timeout=30} t1 | regress_test_role | foo | | | | diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index c805322b6d..33e0edba03 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -85,10 +85,10 @@ INSERT INTO FKTABLE VALUES (NULL, NULL, 0); -- Insert failed rows into FK TABLE INSERT INTO FKTABLE VALUES (100, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname" -DETAIL: Key (ftest1,ftest2)=(100,2) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2)=(100, 2) is not present in table "pktable". INSERT INTO FKTABLE VALUES (2, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname" -DETAIL: Key (ftest1,ftest2)=(2,2) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2)=(2, 2) is not present in table "pktable". INSERT INTO FKTABLE VALUES (NULL, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname" DETAIL: MATCH FULL does not allow mixing of null and nonnull key values. @@ -195,10 +195,10 @@ INSERT INTO FKTABLE VALUES (NULL, NULL, 0); -- Insert failed rows into FK TABLE INSERT INTO FKTABLE VALUES (100, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname2" -DETAIL: Key (ftest1,ftest2)=(100,2) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2)=(100, 2) is not present in table "pktable". INSERT INTO FKTABLE VALUES (2, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname2" -DETAIL: Key (ftest1,ftest2)=(2,2) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2)=(2, 2) is not present in table "pktable". INSERT INTO FKTABLE VALUES (NULL, 2, 4); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname2" DETAIL: MATCH FULL does not allow mixing of null and nonnull key values. @@ -359,7 +359,7 @@ INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5); -- Insert a failed values INSERT INTO FKTABLE VALUES (1, 2, 7, 6); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname3" -DETAIL: Key (ftest1,ftest2,ftest3)=(1,2,7) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2, ftest3)=(1, 2, 7) is not present in table "pktable". -- Show FKTABLE SELECT * from FKTABLE; ftest1 | ftest2 | ftest3 | ftest4 @@ -374,13 +374,13 @@ SELECT * from FKTABLE; -- Try to update something that should fail UPDATE PKTABLE set ptest2=5 where ptest2=2; ERROR: update or delete on table "pktable" violates foreign key constraint "constrname3" on table "fktable" -DETAIL: Key (ptest1,ptest2,ptest3)=(1,2,3) is still referenced from table "fktable". +DETAIL: Key (ptest1, ptest2, ptest3)=(1, 2, 3) is still referenced from table "fktable". -- Try to update something that should succeed UPDATE PKTABLE set ptest1=1 WHERE ptest2=3; -- Try to delete something that should fail DELETE FROM PKTABLE where ptest1=1 and ptest2=2 and ptest3=3; ERROR: update or delete on table "pktable" violates foreign key constraint "constrname3" on table "fktable" -DETAIL: Key (ptest1,ptest2,ptest3)=(1,2,3) is still referenced from table "fktable". +DETAIL: Key (ptest1, ptest2, ptest3)=(1, 2, 3) is still referenced from table "fktable". -- Try to delete something that should work DELETE FROM PKTABLE where ptest1=2; -- Show PKTABLE and FKTABLE @@ -424,7 +424,7 @@ INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5); -- Insert a failed values INSERT INTO FKTABLE VALUES (1, 2, 7, 6); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname3" -DETAIL: Key (ftest1,ftest2,ftest3)=(1,2,7) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2, ftest3)=(1, 2, 7) is not present in table "pktable". -- Show FKTABLE SELECT * from FKTABLE; ftest1 | ftest2 | ftest3 | ftest4 @@ -522,7 +522,7 @@ INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5); -- Insert a failed values INSERT INTO FKTABLE VALUES (1, 2, 7, 6); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname3" -DETAIL: Key (ftest1,ftest2,ftest3)=(1,2,7) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2, ftest3)=(1, 2, 7) is not present in table "pktable". -- Show FKTABLE SELECT * from FKTABLE; ftest1 | ftest2 | ftest3 | ftest4 @@ -628,7 +628,7 @@ INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5); -- Insert a failed values INSERT INTO FKTABLE VALUES (1, 2, 7, 6); ERROR: insert or update on table "fktable" violates foreign key constraint "constrname3" -DETAIL: Key (ftest1,ftest2,ftest3)=(1,2,7) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2, ftest3)=(1, 2, 7) is not present in table "pktable". -- Show FKTABLE SELECT * from FKTABLE; ftest1 | ftest2 | ftest3 | ftest4 @@ -645,7 +645,7 @@ SELECT * from FKTABLE; -- Try to update something that will fail UPDATE PKTABLE set ptest2=5 where ptest2=2; ERROR: insert or update on table "fktable" violates foreign key constraint "constrname3" -DETAIL: Key (ftest1,ftest2,ftest3)=(1,-1,3) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2, ftest3)=(1, -1, 3) is not present in table "pktable". -- Try to update something that will set default UPDATE PKTABLE set ptest1=0, ptest2=5, ptest3=10 where ptest2=2; UPDATE PKTABLE set ptest2=10 where ptest2=4; @@ -896,19 +896,19 @@ insert into pktable(base1, ptest1) values (2, 2); -- let's insert a non-existant fktable value insert into fktable(ftest1, ftest2) values (3, 1); ERROR: insert or update on table "fktable" violates foreign key constraint "fktable_ftest1_fkey" -DETAIL: Key (ftest1,ftest2)=(3,1) is not present in table "pktable". +DETAIL: Key (ftest1, ftest2)=(3, 1) is not present in table "pktable". -- let's make a valid row for that insert into pktable(base1,ptest1) values (3, 1); insert into fktable(ftest1, ftest2) values (3, 1); -- let's try removing a row that should fail from pktable delete from pktable where base1>2; ERROR: update or delete on table "pktable" violates foreign key constraint "fktable_ftest1_fkey" on table "fktable" -DETAIL: Key (base1,ptest1)=(3,1) is still referenced from table "fktable". +DETAIL: Key (base1, ptest1)=(3, 1) is still referenced from table "fktable". -- okay, let's try updating all of the base1 values to *4 -- which should fail. update pktable set base1=base1*4; ERROR: update or delete on table "pktable" violates foreign key constraint "fktable_ftest1_fkey" on table "fktable" -DETAIL: Key (base1,ptest1)=(3,1) is still referenced from table "fktable". +DETAIL: Key (base1, ptest1)=(3, 1) is still referenced from table "fktable". -- okay, let's try an update that should work. update pktable set base1=base1*4 where base1<3; -- and a delete that should work @@ -929,15 +929,15 @@ insert into pktable (base1, ptest1, base2, ptest2) values (1, 3, 2, 2); -- fails (3,2) isn't in base1, ptest1 insert into pktable (base1, ptest1, base2, ptest2) values (2, 3, 3, 2); ERROR: insert or update on table "pktable" violates foreign key constraint "pktable_base2_fkey" -DETAIL: Key (base2,ptest2)=(3,2) is not present in table "pktable". +DETAIL: Key (base2, ptest2)=(3, 2) is not present in table "pktable". -- fails (2,2) is being referenced delete from pktable where base1=2; ERROR: update or delete on table "pktable" violates foreign key constraint "pktable_base2_fkey" on table "pktable" -DETAIL: Key (base1,ptest1)=(2,2) is still referenced from table "pktable". +DETAIL: Key (base1, ptest1)=(2, 2) is still referenced from table "pktable". -- fails (1,1) is being referenced (twice) update pktable set base1=3 where base1=1; ERROR: update or delete on table "pktable" violates foreign key constraint "pktable_base2_fkey" on table "pktable" -DETAIL: Key (base1,ptest1)=(1,1) is still referenced from table "pktable". +DETAIL: Key (base1, ptest1)=(1, 1) is still referenced from table "pktable". -- this sequence of two deletes will work, since after the first there will be no (2,*) references delete from pktable where base2=2; delete from pktable where base1=2; diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index 1fd2b98f6e..83cacbdd20 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -685,7 +685,7 @@ language plpgsql set work_mem = '1MB'; select myfunc(0); ERROR: division by zero -CONTEXT: SQL statement "SELECT 1/ $1 " +CONTEXT: SQL statement "SELECT 1/$1" PL/pgSQL function "myfunc" line 3 at PERFORM select current_setting('work_mem'); current_setting diff --git a/src/test/regress/expected/prepare.out b/src/test/regress/expected/prepare.out index 610f259123..7016e82bd4 100644 --- a/src/test/regress/expected/prepare.out +++ b/src/test/regress/expected/prepare.out @@ -154,20 +154,20 @@ SELECT name, statement, parameter_types FROM pg_prepared_statements ORDER BY name; name | statement | parameter_types ------+---------------------------------------------------------------------+-------------------------------------------------------- - q2 | PREPARE q2(text) AS | {text} - : SELECT datname, datistemplate, datallowconn - : FROM pg_database WHERE datname = $1; - q3 | PREPARE q3(text, int, float, boolean, oid, smallint) AS | {text,integer,"double precision",boolean,oid,smallint} - : SELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR - : ten = $3::bigint OR true = $4 OR oid = $5 OR odd = $6::int) - : ORDER BY unique1; - q5 | PREPARE q5(int, text) AS | {integer,text} - : SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2 - : ORDER BY unique1; - q6 | PREPARE q6 AS | {integer,name} - : SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2; - q7 | PREPARE q7(unknown) AS | {path} - : SELECT * FROM road WHERE thepath = $1; + q2 | PREPARE q2(text) AS +| {text} + | SELECT datname, datistemplate, datallowconn +| + | FROM pg_database WHERE datname = $1; | + q3 | PREPARE q3(text, int, float, boolean, oid, smallint) AS +| {text,integer,"double precision",boolean,oid,smallint} + | SELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR +| + | ten = $3::bigint OR true = $4 OR oid = $5 OR odd = $6::int)+| + | ORDER BY unique1; | + q5 | PREPARE q5(int, text) AS +| {integer,text} + | SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2 +| + | ORDER BY unique1; | + q6 | PREPARE q6 AS +| {integer,name} + | SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2; | + q7 | PREPARE q7(unknown) AS +| {path} + | SELECT * FROM road WHERE thepath = $1; | (5 rows) -- test DEALLOCATE ALL; diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index aa74083380..2e305e699c 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -377,10 +377,10 @@ SELECT * FROM main_table ORDER BY a, b; SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a'; pg_get_triggerdef -------------------------------------------------- - CREATE TRIGGER modified_a - BEFORE UPDATE OF a ON main_table - FOR EACH ROW - WHEN (old.a <> new.a) + CREATE TRIGGER modified_a + + BEFORE UPDATE OF a ON main_table + + FOR EACH ROW + + WHEN (old.a <> new.a) + EXECUTE PROCEDURE trigger_func('modified_a') (1 row) @@ -393,10 +393,10 @@ SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_any'; pg_get_triggerdef ---------------------------------------------------- - CREATE TRIGGER modified_any - BEFORE UPDATE OF a ON main_table - FOR EACH ROW - WHEN (old.* IS DISTINCT FROM new.*) + CREATE TRIGGER modified_any + + BEFORE UPDATE OF a ON main_table + + FOR EACH ROW + + WHEN (old.* IS DISTINCT FROM new.*) + EXECUTE PROCEDURE trigger_func('modified_any') (1 row) @@ -427,9 +427,9 @@ SELECT pg_get_triggerdef(oid) FROM pg_trigger WHERE tgrelid = 'main_table'::regc SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'after_upd_a_b_row_trig'; pg_get_triggerdef --------------------------------------------------------- - CREATE TRIGGER after_upd_a_b_row_trig - AFTER UPDATE OF a, b ON main_table - FOR EACH ROW + CREATE TRIGGER after_upd_a_b_row_trig + + AFTER UPDATE OF a, b ON main_table + + FOR EACH ROW + EXECUTE PROCEDURE trigger_func('after_upd_a_b_row') (1 row) diff --git a/src/test/regress/expected/tsearch.out b/src/test/regress/expected/tsearch.out index 04b75dc6d0..1cd9186d69 100644 --- a/src/test/regress/expected/tsearch.out +++ b/src/test/regress/expected/tsearch.out @@ -344,8 +344,8 @@ SELECT * FROM ts_parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.w 3 | ewri2 12 | 13 | - 12 | - : + 12 | + + | 19 | /usr/local/fff 12 | 19 | /awdf/dwqe/4325 @@ -377,8 +377,8 @@ SELECT * FROM ts_parse('default', '345 qwe@efd.r '' http://www.com/ http://aew.w 20 | -4.2 12 | . 22 | 234 - 12 | - : + 12 | + + | 12 | < 1 | i 12 | @@ -559,9 +559,9 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'paint&water')); ts_headline ----------------------------------------- - painted Ocean. - Water, water, every where - And all the boards did shrink; + painted Ocean. + + Water, water, every where+ + And all the boards did shrink; + Water, water, every (1 row) @@ -578,9 +578,9 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'breath&motion&water')); ts_headline ---------------------------------- - breath nor motion, - As idle as a painted Ship - Upon a painted Ocean. + breath nor motion,+ + As idle as a painted Ship + + Upon a painted Ocean. + Water, water (1 row) @@ -597,9 +597,9 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'ocean')); ts_headline ---------------------------------- - Ocean. - Water, water, every where - And all the boards did shrink; + Ocean. + + Water, water, every where + + And all the boards did shrink;+ Water, water, every where (1 row) @@ -618,17 +618,17 @@ ff-bg to_tsquery('english', 'sea&foo'), 'HighlightAll=true'); ts_headline ----------------------------------------------------------------------------- - - - - - Sea view wow foo bar qq - YES   - ff-bg - - + + + + + + + + + Sea view wow foo bar qq + + YES  + + ff-bg + + + + + (1 row) @@ -646,13 +646,13 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'ocean'), 'MaxFragments=1'); ts_headline ------------------------------------ - after day, - We stuck, nor breath nor motion, - As idle as a painted Ship - Upon a painted Ocean. - Water, water, every where - And all the boards did shrink; - Water, water, every where, + after day, + + We stuck, nor breath nor motion,+ + As idle as a painted Ship + + Upon a painted Ocean. + + Water, water, every where + + And all the boards did shrink; + + Water, water, every where, + Nor any drop (1 row) @@ -670,13 +670,13 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2'); ts_headline ---------------------------------------------- - after day, day after day, - We stuck, nor breath nor motion, - As idle as a painted Ship - Upon a painted Ocean. - Water, water, every where - And all the boards did shrink; - Water, water, every where ... drop to drink. + after day, day after day, + + We stuck, nor breath nor motion, + + As idle as a painted Ship + + Upon a painted Ocean. + + Water, water, every where + + And all the boards did shrink; + + Water, water, every where ... drop to drink.+ S. T. Coleridge (1 row) @@ -694,9 +694,9 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'ocean & seahorse'), 'MaxFragments=1'); ts_headline ------------------------------------ - - Day after day, day after day, - We stuck, nor breath nor motion, + + + Day after day, day after day, + + We stuck, nor breath nor motion,+ As idle as (1 row) @@ -714,13 +714,13 @@ S. T. Coleridge (1772-1834) ', to_tsquery('english', 'Coleridge & stuck'), 'MaxFragments=2,FragmentDelimiter=***'); ts_headline -------------------------------------------- - after day, day after day, - We stuck, nor breath nor motion, - As idle as a painted Ship - Upon a painted Ocean. - Water, water, every where - And all the boards did shrink; - Water, water, every where***drop to drink. + after day, day after day, + + We stuck, nor breath nor motion, + + As idle as a painted Ship + + Upon a painted Ocean. + + Water, water, every where + + And all the boards did shrink; + + Water, water, every where***drop to drink.+ S. T. Coleridge (1 row) diff --git a/src/test/regress/expected/with.out b/src/test/regress/expected/with.out index a3e94e93d4..e46ed78ae6 100644 --- a/src/test/regress/expected/with.out +++ b/src/test/regress/expected/with.out @@ -279,16 +279,16 @@ SELECT pg_get_viewdef('vsubdepartment'::regclass); SELECT pg_get_viewdef('vsubdepartment'::regclass, true); pg_get_viewdef -------------------------------------------------------------------------------------- - WITH RECURSIVE subdepartment AS ( - SELECT department.id, department.parent_department, department.name - FROM department - WHERE department.name = 'A'::text - UNION ALL - SELECT d.id, d.parent_department, d.name - FROM department d, subdepartment sd - WHERE d.parent_department = sd.id - ) - SELECT subdepartment.id, subdepartment.parent_department, subdepartment.name + WITH RECURSIVE subdepartment AS ( + + SELECT department.id, department.parent_department, department.name+ + FROM department + + WHERE department.name = 'A'::text + + UNION ALL + + SELECT d.id, d.parent_department, d.name + + FROM department d, subdepartment sd + + WHERE d.parent_department = sd.id + + ) + + SELECT subdepartment.id, subdepartment.parent_department, subdepartment.name + FROM subdepartment; (1 row)