diff options
Diffstat (limited to 'src/interfaces/libpq/fe-exec.c')
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index aac0ea0e97b..ae770e197aa 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.50 1998/05/06 23:51:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.51 1998/05/06 23:53:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -748,7 +748,8 @@ PQexec(PGconn *conn, const char *query) return NULL; /* For backwards compatibility, return the last result if there are - * more than one. + * more than one. We have to stop if we see copy in/out, however. + * We will resume parsing when application calls PQendcopy. */ lastResult = NULL; while ((result = PQgetResult(conn)) != NULL) @@ -756,6 +757,9 @@ PQexec(PGconn *conn, const char *query) if (lastResult) PQclear(lastResult); lastResult = result; + if (result->resultStatus == PGRES_COPY_IN || + result->resultStatus == PGRES_COPY_OUT) + break; } return lastResult; } @@ -950,7 +954,7 @@ PQputline(PGconn *conn, const char *s) { if (conn && conn->sock >= 0) { - (void) pqPuts(s, conn); + (void) pqPutnchar(s, strlen(s), conn); } } @@ -988,7 +992,7 @@ PQendcopy(PGconn *conn) result = PQgetResult(conn); /* Expecting a successful result */ - if (result->resultStatus == PGRES_COMMAND_OK) + if (result && result->resultStatus == PGRES_COMMAND_OK) { PQclear(result); return 0; |