]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix unintentional breakage of COPY TO/FROM stdin. Mea culpa.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Oct 2002 16:44:21 +0000 (16:44 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Oct 2002 16:44:21 +0000 (16:44 +0000)
src/bin/psql/common.c

index 46186e55692eb0619f09bc654f29a450ce43f7fc..e74b8c2769fecd1fc5df3634eaab785b63c268a5 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.47 2002/10/15 02:24:16 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.48 2002/10/15 16:44:21 tgl Exp $
  */
 #include "postgres_fe.h"
 
@@ -236,19 +236,26 @@ PSQLexec(const char *query, bool ignore_command_ok)
        if (var && strcmp(var, "noexec") == 0)
                return NULL;
 
+       /* discard any uneaten results of past queries */
+       while ((newres = PQgetResult(pset.db)) != NULL)
+               PQclear(newres);
+
        cancelConn = pset.db;
        if (PQsendQuery(pset.db, query))
        {
                while ((newres = PQgetResult(pset.db)) != NULL)
                {
-                       if (ignore_command_ok &&
-                               PQresultStatus(newres) == PGRES_COMMAND_OK)
+                       rstatus = PQresultStatus(newres);
+                       if (ignore_command_ok && rstatus == PGRES_COMMAND_OK)
                        {
                                PQclear(newres);
                                continue;
                        }
                        PQclear(res);
                        res = newres;
+                       if (rstatus == PGRES_COPY_IN ||
+                               rstatus == PGRES_COPY_OUT)
+                               break;
                }
        }
        rstatus = PQresultStatus(res);