]> granicus.if.org Git - postgresql/commitdiff
libpq: Fix a few bits that didn't get the memo about COPY BOTH.
authorRobert Haas <rhaas@postgresql.org>
Fri, 26 Apr 2013 12:57:47 +0000 (08:57 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 26 Apr 2013 12:59:40 +0000 (08:59 -0400)
There's probably no real bug here at present, so not backpatching.
But it seems good to make these bits consistent with the rest of
libpq, so as to avoid future surprises.

Patch by me.  Review by Tom Lane.

src/interfaces/libpq/fe-protocol3.c

index 1e26e1991980ccce6e876d9bd43d1692f07f3149..7fa090adf35b657bcb9b19a498b6dc564f76a09e 100644 (file)
@@ -1566,7 +1566,8 @@ pqGetline3(PGconn *conn, char *s, int maxlen)
        int                     status;
 
        if (conn->sock < 0 ||
-               conn->asyncStatus != PGASYNC_COPY_OUT ||
+               (conn->asyncStatus != PGASYNC_COPY_OUT &&
+                conn->asyncStatus != PGASYNC_COPY_BOTH) ||
                conn->copy_is_binary)
        {
                printfPQExpBuffer(&conn->errorMessage,
@@ -1617,7 +1618,8 @@ pqGetlineAsync3(PGconn *conn, char *buffer, int bufsize)
        int                     msgLength;
        int                     avail;
 
-       if (conn->asyncStatus != PGASYNC_COPY_OUT)
+       if (conn->asyncStatus != PGASYNC_COPY_OUT
+               && conn->asyncStatus != PGASYNC_COPY_BOTH)
                return -1;                              /* we are not doing a copy... */
 
        /*
@@ -1671,7 +1673,8 @@ pqEndcopy3(PGconn *conn)
        PGresult   *result;
 
        if (conn->asyncStatus != PGASYNC_COPY_IN &&
-               conn->asyncStatus != PGASYNC_COPY_OUT)
+               conn->asyncStatus != PGASYNC_COPY_OUT &&
+               conn->asyncStatus != PGASYNC_COPY_BOTH)
        {
                printfPQExpBuffer(&conn->errorMessage,
                                                  libpq_gettext("no COPY in progress\n"));
@@ -1679,7 +1682,8 @@ pqEndcopy3(PGconn *conn)
        }
 
        /* Send the CopyDone message if needed */
-       if (conn->asyncStatus == PGASYNC_COPY_IN)
+       if (conn->asyncStatus == PGASYNC_COPY_IN ||
+               conn->asyncStatus == PGASYNC_COPY_BOTH)
        {
                if (pqPutMsgStart('c', false, conn) < 0 ||
                        pqPutMsgEnd(conn) < 0)