From: [email protected]
authorMarc G. Fournier
Wed, 8 Jan 1997 23:25:32 +0000 (23:25 +0000)
committerMarc G. Fournier
Wed, 8 Jan 1997 23:25:32 +0000 (23:25 +0000)
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

index 9f1f64c7265e3e30486e51732fc296519c336e43..6eea31d99950065a23d836418871cda14639b60f 100644 (file)
@@ -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;
         }
       }