OSDN Git Service

From: wieck@sapserv.debis.de
authorMarc G. Fournier <scrappy@hub.org>
Wed, 8 Jan 1997 23:25:32 +0000 (23:25 +0000)
committerMarc G. Fournier <scrappy@hub.org>
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 9f1f64c..6eea31d 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;
         }
       }