From a9ed49d5b5661626280fca3f45c3d8ae3f9b69e4 Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Wed, 29 Apr 1998 02:04:01 +0000
Subject: [PATCH] From: Oliver Elphick <olly@lfix.co.uk>

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 | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index c82d8381061..4297abcfd99 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.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",
-- 
GitLab