From: Oliver Elphick
authorMarc G. Fournier
Wed, 29 Apr 1998 02:04:01 +0000 (02:04 +0000)
committerMarc G. Fournier
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  to me as Debian
maintainer of postgresql) cures the problem:

src/interfaces/libpq/fe-exec.c

index c82d8381061e0c1b12b8e7d9f09678a6487c4c4b..4297abcfd9961b2ffae4136e0aed11b6b7aaf905 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",