From 389e336ca9784ae23fb103c151a3f18414e3dcfd Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Wed, 8 Jan 1997 23:25:32 +0000 Subject: [PATCH] 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 --- src/interfaces/libpq/fe-exec.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 9f1f64c726..6eea31d999 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; } } -- 2.11.0