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.
This commit is contained in:
Tom Lane 2015-01-31 18:35:13 -05:00
parent 77e9125e84
commit b7d254c079
2 changed files with 13 additions and 11 deletions

View File

@ -53,8 +53,8 @@ PostgreSQL documentation
<term><option>--echo-all</></term>
<listitem>
<para>
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 <varname>ECHO</varname> to
<literal>all</literal>.
</para>
@ -2863,14 +2863,14 @@ bar
<term><varname>ECHO</varname></term>
<listitem>
<para>
If set to <literal>all</literal>, 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 <literal>all</literal>, 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 <option>-a</option>. If set to
<literal>queries</literal>,
<application>psql</application> merely prints all queries as
they are sent to the server. The switch for this is
<option>-e</option>. If set to <literal>errors</literal> then only
<application>psql</application> prints each query to standard output
as it is sent to the server. The switch for this is
<option>-e</option>. If set to <literal>errors</literal>, then only
failed queries are displayed on standard error output. The switch
for this is <option>-b</option>. If unset, or if set to
<literal>none</literal> (or any other value than those above) then

View File

@ -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)