From: Tom Lane Date: Sat, 31 Jan 2015 23:35:13 +0000 (-0500) Subject: Fix documentation of psql's ECHO all mode. X-Git-Tag: REL9_5_ALPHA1~836 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=b7d254c0793e072dcf6d370195291cf85a7e9976;p=postgresql.git Fix documentation of psql's ECHO all mode. "ECHO all" is ignored for interactive input, and has been for a very long time, though possibly not for as long as the documentation has claimed the opposite. Fix that, and also note that empty lines aren't echoed, which while dubious is another longstanding behavior (it's embedded in our regression test files for one thing). Per bug #12721 from Hans Ginzel. In HEAD, also improve the code comments in this area, and suppress an unnecessary fflush(stdout) when we're not echoing. That would likely be safe to back-patch, but I'll not risk it mere hours before a release wrap. --- diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index bdfb67cd9a1..b92a1ea02b3 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -53,8 +53,8 @@ PostgreSQL documentation - Print all input lines to standard output as they are read. This is more - useful for script processing than interactive mode. This is + Print all nonempty input lines to standard output as they are read. + (This does not apply to lines read interactively.) This is equivalent to setting the variable ECHO to all. @@ -2863,14 +2863,14 @@ bar ECHO - If set to all, all lines - entered from the keyboard or from a script are written to the standard output - before they are parsed or executed. To select this behavior on program + If set to all, all nonempty input lines are printed + to standard output as they are read. (This does not apply to lines + read interactively.) To select this behavior on program start-up, use the switch . If set to queries, - psql merely prints all queries as - they are sent to the server. The switch for this is - . If set to errors then only + psql prints each query to standard output + as it is sent to the server. The switch for this is + . If set to errors, then only failed queries are displayed on standard error output. The switch for this is . If unset, or if set to none (or any other value than those above) then diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c index d2267640abe..b6cef94272c 100644 --- a/src/bin/psql/mainloop.c +++ b/src/bin/psql/mainloop.c @@ -187,7 +187,7 @@ MainLoop(FILE *source) break; } - /* nothing left on line? then ignore */ + /* no further processing of empty lines, unless within a literal */ if (line[0] == '\0' && !psql_scan_in_quote(scan_state)) { free(line); @@ -211,10 +211,12 @@ MainLoop(FILE *source) continue; } - /* echo back if flag is set */ + /* echo back if flag is set, unless interactive */ if (pset.echo == PSQL_ECHO_ALL && !pset.cur_cmd_interactive) + { puts(line); - fflush(stdout); + fflush(stdout); + } /* insert newlines into query buffer between source lines */ if (query_buf->len > 0)