OSDN Git Service

From: Oliver Elphick <olly@lfix.co.uk>
authorMarc G. Fournier <scrappy@hub.org>
Wed, 29 Apr 1998 02:04:01 +0000 (02:04 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Wed, 29 Apr 1998 02:04:01 +0000 (02:04 +0000)
If PQfn() receives NOTICEs from the backend, it fails because there is no
provision to deal with them.

This patch (supplied by Anders Hammarquist <iko@netg.se> to me as Debian
maintainer of postgresql) cures the problem:

src/interfaces/libpq/fe-exec.c

index c82d838..4297abc 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.48 1998/03/15 08:11:11 scrappy Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.49 1998/04/29 02:04:01 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1545,13 +1545,27 @@ PQfn(PGconn *conn,
        }
        pqFlush(pfout, pfdebug);
 
-       id = pqGetc(pfin, pfdebug);
-       if (id != 'V')
+       while ((id = pqGetc(pfin, pfdebug)) != 'V')
        {
                if (id == 'E')
                {
                        pqGets(conn->errorMessage, ERROR_MSG_LENGTH, pfin, pfdebug);
                }
+               else if (id == 'N')
+               {
+                      /* print notice and go back to processing return 
+                          values */
+                      if (pqGets(conn->errorMessage, ERROR_MSG_LENGTH, 
+                               pfin, pfdebug) == 1)
+                       {
+                               sprintf(conn->errorMessage,
+                               "Notice return detected from backend, but "
+                               "message cannot be read");
+                       }
+                       else
+                               fprintf(stderr, "%s\n", conn->errorMessage);
+                       continue;
+               }
                else
                        sprintf(conn->errorMessage,
                           "PQfn: expected a 'V' from the backend. Got '%c' instead",