From d11dc0f652277874e79a6eee4ece346e6978eea0 Mon Sep 17 00:00:00 2001
From: Marti Raudsepp <marti@juffo.org>
Date: Sat, 15 Jan 2011 22:55:28 +0200
Subject: [PATCH 2/2] Move MOVE/FETCH command tag formatting to ProcessUtility.

---
 src/backend/commands/portalcmds.c |   20 ++++----------------
 src/backend/tcop/utility.c        |   13 +++++++++++--
 src/include/commands/portalcmds.h |    3 +--
 3 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index dda592c..80b581d 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -137,15 +137,12 @@ PerformCursorOpen(PlannedStmt *stmt, ParamListInfo params,
  *
  *	stmt: parsetree node for command
  *	dest: where to send results
- *	completionTag: points to a buffer of size COMPLETION_TAG_BUFSIZE
- *		in which to store a command completion status string.
  *
- * completionTag may be NULL if caller doesn't want a status string.
+ * Returns number of rows processed.
  */
-void
+long
 PerformPortalFetch(FetchStmt *stmt,
-				   DestReceiver *dest,
-				   char *completionTag)
+				   DestReceiver *dest)
 {
 	Portal		portal;
 	long		nprocessed;
@@ -174,16 +171,7 @@ PerformPortalFetch(FetchStmt *stmt,
 		dest = None_Receiver;
 
 	/* Do it */
-	nprocessed = PortalRunFetch(portal,
-								stmt->direction,
-								stmt->howMany,
-								dest);
-
-	/* Return command status if wanted */
-	if (completionTag)
-		snprintf(completionTag, COMPLETION_TAG_BUFSIZE, "%s %ld",
-				 stmt->ismove ? "MOVE" : "FETCH",
-				 nprocessed);
+	return PortalRunFetch(portal, stmt->direction, stmt->howMany, dest);
 }
 
 /*
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index b1120d0..40c9a02 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -482,8 +482,17 @@ standard_ProcessUtility(Node *parsetree,
 			break;
 
 		case T_FetchStmt:
-			PerformPortalFetch((FetchStmt *) parsetree, dest,
-							   completionTag);
+			{
+				FetchStmt *stmt = (FetchStmt *) parsetree;
+				long nprocessed;
+
+				nprocessed = PerformPortalFetch(stmt, dest);
+
+				if (completionTag)
+					snprintf(completionTag, COMPLETION_TAG_BUFSIZE,
+							 stmt->ismove ? "MOVE %ld" : "FETCH %ld",
+							 nprocessed);
+			}
 			break;
 
 			/*
diff --git a/src/include/commands/portalcmds.h b/src/include/commands/portalcmds.h
index c64aabf..6afd737 100644
--- a/src/include/commands/portalcmds.h
+++ b/src/include/commands/portalcmds.h
@@ -22,8 +22,7 @@
 extern void PerformCursorOpen(PlannedStmt *stmt, ParamListInfo params,
 				  const char *queryString, bool isTopLevel);
 
-extern void PerformPortalFetch(FetchStmt *stmt, DestReceiver *dest,
-				   char *completionTag);
+extern long PerformPortalFetch(FetchStmt *stmt, DestReceiver *dest);
 
 extern void PerformPortalClose(const char *name);
 
-- 
1.7.3.5

