From 693aad413b16aac85fb9a4e792d84cd87778aa9e Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 24 Aug 2003 21:02:43 +0000
Subject: [PATCH] Change warnings for non-existing or pre-existing cursors to
 errors.

---
 doc/src/sgml/ref/close.sgml           |  6 +++---
 doc/src/sgml/ref/declare.sgml         |  7 +++----
 doc/src/sgml/ref/fetch.sgml           |  4 ++--
 src/backend/commands/portalcmds.c     | 23 +++++++++--------------
 src/backend/utils/mmgr/portalmem.c    |  6 +++---
 src/test/regress/expected/portals.out |  2 +-
 6 files changed, 21 insertions(+), 27 deletions(-)

diff --git a/doc/src/sgml/ref/close.sgml b/doc/src/sgml/ref/close.sgml
index c86e945a3d..63b2f15d16 100644
--- a/doc/src/sgml/ref/close.sgml
+++ b/doc/src/sgml/ref/close.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/close.sgml,v 1.15 2003/08/17 04:46:00 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/close.sgml,v 1.16 2003/08/24 21:02:42 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -70,10 +70,10 @@ CLOSE <replaceable class="PARAMETER">cursor</replaceable>
    </varlistentry>
 
    <varlistentry>
-    <term><computeroutput>WARNING:  PerformPortalClose: portal "<replaceable class="PARAMETER">cursor</replaceable>" not found</computeroutput></term>
+    <term><computeroutput>ERROR:  cursor "<replaceable class="PARAMETER">cursor</replaceable>" does not exist</computeroutput></term>
     <listitem>
      <para>
-      This warning is given if <replaceable
+      Message returned if <replaceable
       class="PARAMETER">cursor</replaceable> is not declared or has
       already been closed.
      </para>
diff --git a/doc/src/sgml/ref/declare.sgml b/doc/src/sgml/ref/declare.sgml
index 0aaf0dde43..14ce71f4a6 100644
--- a/doc/src/sgml/ref/declare.sgml
+++ b/doc/src/sgml/ref/declare.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/declare.sgml,v 1.24 2003/05/04 02:23:16 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/declare.sgml,v 1.25 2003/08/24 21:02:42 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -202,11 +202,10 @@ DECLARE <replaceable class="parameter">cursorname</replaceable> [ BINARY ] [ INS
    </varlistentry>
 
    <varlistentry>
-    <term><computeroutput>WARNING:  Closing pre-existing portal "<replaceable class="parameter">cursorname</replaceable>"</computeroutput></term>
+    <term><computeroutput>ERROR:  cursor "<replaceable class="parameter">cursorname</replaceable>" already exists</computeroutput></term>
     <listitem>
      <para>
-      This message is reported if a cursor with the same name already
-      exists. The previous definition is discarded.
+      This error occurs if a cursor with the same name already exists.
      </para>
     </listitem>
    </varlistentry>
diff --git a/doc/src/sgml/ref/fetch.sgml b/doc/src/sgml/ref/fetch.sgml
index 305e5fc02c..05960eb2e0 100644
--- a/doc/src/sgml/ref/fetch.sgml
+++ b/doc/src/sgml/ref/fetch.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/fetch.sgml,v 1.29 2003/05/04 02:23:16 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/fetch.sgml,v 1.30 2003/08/24 21:02:43 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -281,7 +281,7 @@ where <replaceable class="PARAMETER">direction</replaceable> can be empty or one
 
   <variablelist>
    <varlistentry>
-    <term><computeroutput>WARNING:  PerformPortalFetch: portal "<replaceable class="PARAMETER">cursor</replaceable>" not found</computeroutput></term>
+    <term><computeroutput>ERROR:  cursor "<replaceable class="PARAMETER">cursor</replaceable>" does not exist</computeroutput></term>
     <listitem>
      <para>
       There is no cursor with the specified name.
diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index c11b48db4c..27cd7503c3 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/portalcmds.c,v 1.23 2003/08/08 21:41:32 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/portalcmds.c,v 1.24 2003/08/24 21:02:43 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -88,10 +88,9 @@ PerformCursorOpen(DeclareCursorStmt *stmt)
 
 	/*
 	 * Create a portal and copy the query and plan into its memory
-	 * context. (If a duplicate cursor name already exists, warn and drop
-	 * it.)
+	 * context.
 	 */
-	portal = CreatePortal(stmt->portalname, true, false);
+	portal = CreatePortal(stmt->portalname, false, false);
 
 	oldContext = MemoryContextSwitchTo(PortalGetHeapMemory(portal));
 
@@ -168,13 +167,10 @@ PerformPortalFetch(FetchStmt *stmt,
 	portal = GetPortalByName(stmt->portalname);
 	if (!PortalIsValid(portal))
 	{
-		/* FIXME: shouldn't this be an ERROR? */
-		ereport(WARNING,
+		ereport(ERROR,
 				(errcode(ERRCODE_UNDEFINED_CURSOR),
-			  errmsg("portal \"%s\" does not exist", stmt->portalname)));
-		if (completionTag)
-			strcpy(completionTag, stmt->ismove ? "MOVE 0" : "FETCH 0");
-		return;
+				 errmsg("cursor \"%s\" does not exist", stmt->portalname)));
+		return; /* keep compiler happy */
 	}
 
 	/* Adjust dest if needed.  MOVE wants destination None */
@@ -218,11 +214,10 @@ PerformPortalClose(const char *name)
 	portal = GetPortalByName(name);
 	if (!PortalIsValid(portal))
 	{
-		ereport(WARNING,
+		ereport(ERROR,
 				(errcode(ERRCODE_UNDEFINED_CURSOR),
-				 errmsg("portal \"%s\" does not exist", name),
-				 errfunction("PerformPortalClose")));	/* for ecpg */
-		return;
+				 errmsg("cursor \"%s\" does not exist", name)));
+		return; /* keep compiler happy */
 	}
 
 	/*
diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c
index 3e51ad2b36..00bf3e23d2 100644
--- a/src/backend/utils/mmgr/portalmem.c
+++ b/src/backend/utils/mmgr/portalmem.c
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.61 2003/08/04 02:40:08 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.62 2003/08/24 21:02:43 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -167,11 +167,11 @@ CreatePortal(const char *name, bool allowDup, bool dupSilent)
 		if (!allowDup)
 			ereport(ERROR,
 					(errcode(ERRCODE_DUPLICATE_CURSOR),
-					 errmsg("portal \"%s\" already exists", name)));
+					 errmsg("cursor \"%s\" already exists", name)));
 		if (!dupSilent)
 			ereport(WARNING,
 					(errcode(ERRCODE_DUPLICATE_CURSOR),
-					 errmsg("closing pre-existing portal \"%s\"",
+					 errmsg("closing existing cursor \"%s\"",
 							name)));
 		PortalDrop(portal, false);
 	}
diff --git a/src/test/regress/expected/portals.out b/src/test/regress/expected/portals.out
index 245edffe54..b8f8341898 100644
--- a/src/test/regress/expected/portals.out
+++ b/src/test/regress/expected/portals.out
@@ -737,4 +737,4 @@ DECLARE foo26 CURSOR WITH HOLD FOR SELECT * FROM tenk1;
 ROLLBACK;
 -- should fail
 FETCH FROM foo26;
-WARNING:  portal "foo26" does not exist
+ERROR:  cursor "foo26" does not exist