Improve behavior of \watch with non-tuple-returning commands.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 May 2013 20:41:22 +0000 (16:41 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 4 May 2013 20:41:22 +0000 (16:41 -0400)
Print the command tag if we get PGRES_COMMAND_OK, and throw an error for
other cases.  Per gripe from Michael Paquier.

In passing, add an fflush(), just to be real sure the output appears
before we sleep.

src/bin/psql/command.c

index 4e4c5bec7b25d0ccdc697b72e6f3c0036a653528..0e99794032822c8b830e4a5b99cb4133daea982f 100644 (file)
@@ -2648,18 +2648,33 @@ do_watch(PQExpBuffer query_buf, long sleep)
                printQuery(res, &myopt, pset.queryFout, pset.logfile);
                break;
 
+           case PGRES_COMMAND_OK:
+               fprintf(pset.queryFout, "%s\n%s\n\n", title, PQcmdStatus(res));
+               break;
+
            case PGRES_EMPTY_QUERY:
                psql_error(_("\\watch cannot be used with an empty query\n"));
                PQclear(res);
                return false;
 
+           case PGRES_COPY_OUT:
+           case PGRES_COPY_IN:
+           case PGRES_COPY_BOTH:
+               psql_error(_("\\watch cannot be used with COPY\n"));
+               PQclear(res);
+               return false;
+
            default:
-               /* should we fail for non-tuple-result commands? */
-               break;
+               /* other cases should have been handled by PSQLexec */
+               psql_error(_("unexpected result status for \\watch\n"));
+               PQclear(res);
+               return false;
        }
 
        PQclear(res);
 
+       fflush(pset.queryFout);
+
        /*
         * Set up cancellation of 'watch' via SIGINT.  We redo this each time
         * through the loop since it's conceivable something inside PSQLexec