diff options
author | Marc G. Fournier <scrappy@hub.org> | 1997-01-08 23:25:32 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1997-01-08 23:25:32 +0000 |
commit | 389e336ca9784ae23fb103c151a3f18414e3dcfd (patch) | |
tree | b14efad4c4d0ab655543f9015006280eb79f9f56 /src | |
parent | 16293d05e02675c41b867c6d60be57478c651310 (diff) | |
download | postgresql-389e336ca9784ae23fb103c151a3f18414e3dcfd.tar.gz postgresql-389e336ca9784ae23fb103c151a3f18414e3dcfd.zip |
From: wieck@sapserv.debis.de
Hi,
counting the empty dummy queries in libpq isn't everything.
If the backend sends an error, the I returns from the dummies
still come. So we must eat them up in any case, not just
returning on the occurence of an E reply.
Until later, Jan
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 9f1f64c7265..6eea31d9995 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.26 1996/12/31 07:29:15 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.27 1997/01/08 23:25:32 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -380,6 +380,10 @@ process_response_from_backend(FILE *pfin, FILE *pfout, FILE *pfdebug, responses, less the number of corresponding responses we have received. */ + int errors; + /* If an error is received, we must still drain out the empty + queries sent. So we need another flag. + */ char cmdStatus[MAX_MESSAGE_LEN]; char pname[MAX_MESSAGE_LEN]; /* portal name */ @@ -388,6 +392,7 @@ process_response_from_backend(FILE *pfin, FILE *pfout, FILE *pfdebug, */ emptiesSent = 0; /* No empty queries sent yet */ + errors = 0; /* No errors received yet */ pname[0] = '\0'; done = false; /* initial value */ @@ -444,7 +449,10 @@ process_response_from_backend(FILE *pfin, FILE *pfout, FILE *pfdebug, "but attempt to read the error message failed."); } *result_p = (PGresult*)NULL; - done = true; + errors++; + if (emptiesSent == 0) { + done = true; + } break; case 'I': { /* empty query */ /* read and throw away the closing '\0' */ @@ -458,13 +466,21 @@ process_response_from_backend(FILE *pfin, FILE *pfout, FILE *pfdebug, * If this is the result of a portal query command set the * command status and message accordingly. DZ - 31-8-1996 */ - *result_p = makeEmptyPGresult(conn,PGRES_COMMAND_OK); - strncpy((*result_p)->cmdStatus, cmdStatus, CMDSTATUS_LEN-1); + if (!errors) { + *result_p = makeEmptyPGresult(conn,PGRES_COMMAND_OK); + strncpy((*result_p)->cmdStatus, cmdStatus, CMDSTATUS_LEN-1); + } else { + *result_p = (PGresult*)NULL; + } done = true; } } else { - *result_p = makeEmptyPGresult(conn, PGRES_EMPTY_QUERY); + if (!errors) { + *result_p = makeEmptyPGresult(conn, PGRES_EMPTY_QUERY); + } else { + *result_p = (PGresult*)NULL; + } done = true; } } |