From 0e20c485617c3bcde8d9f0759d5ee1ef1c442004 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 3 Sep 2006 03:19:45 +0000
Subject: [PATCH] Revert FETCH/MOVE int64 patch.  Was using incorrect checks
 for fetch/move in scan.l.

---
 src/backend/commands/portalcmds.c |  6 ++--
 src/backend/executor/spi.c        | 12 ++++----
 src/backend/parser/gram.y         | 43 +-------------------------
 src/backend/parser/scan.l         | 18 +----------
 src/backend/tcop/postgres.c       |  8 ++---
 src/backend/tcop/pquery.c         | 50 +++++++++++++++----------------
 src/include/executor/spi.h        |  6 ++--
 src/include/nodes/parsenodes.h    | 11 ++-----
 src/include/tcop/pquery.h         |  8 ++---
 src/include/utils/portal.h        |  4 +--
 10 files changed, 51 insertions(+), 115 deletions(-)

diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index a5b7370acd2..00ad5444ca0 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.52 2006/09/02 18:17:17 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/portalcmds.c,v 1.53 2006/09/03 03:19:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -177,7 +177,7 @@ PerformPortalFetch(FetchStmt *stmt,
 				   char *completionTag)
 {
 	Portal		portal;
-	int64		nprocessed;
+	long		nprocessed;
 
 	/*
 	 * Disallow empty-string cursor name (conflicts with protocol-level
@@ -210,7 +210,7 @@ PerformPortalFetch(FetchStmt *stmt,
 
 	/* Return command status if wanted */
 	if (completionTag)
-		snprintf(completionTag, COMPLETION_TAG_BUFSIZE, "%s " INT64_FORMAT,
+		snprintf(completionTag, COMPLETION_TAG_BUFSIZE, "%s %ld",
 				 stmt->ismove ? "MOVE" : "FETCH",
 				 nprocessed);
 }
diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c
index e6268da6e54..e6fcae7f0b6 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.160 2006/09/02 18:17:17 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.161 2006/09/03 03:19:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -45,7 +45,7 @@ static int	_SPI_pquery(QueryDesc *queryDesc, long tcount);
 
 static void _SPI_error_callback(void *arg);
 
-static void _SPI_cursor_operation(Portal portal, bool forward, int64 count,
+static void _SPI_cursor_operation(Portal portal, bool forward, long count,
 					  DestReceiver *dest);
 
 static _SPI_plan *_SPI_copy_plan(_SPI_plan *plan, int location);
@@ -980,7 +980,7 @@ SPI_cursor_find(const char *name)
  *	Fetch rows in a cursor
  */
 void
-SPI_cursor_fetch(Portal portal, bool forward, int64 count)
+SPI_cursor_fetch(Portal portal, bool forward, long count)
 {
 	_SPI_cursor_operation(portal, forward, count,
 						  CreateDestReceiver(DestSPI, NULL));
@@ -994,7 +994,7 @@ SPI_cursor_fetch(Portal portal, bool forward, int64 count)
  *	Move in a cursor
  */
 void
-SPI_cursor_move(Portal portal, bool forward, int64 count)
+SPI_cursor_move(Portal portal, bool forward, long count)
 {
 	_SPI_cursor_operation(portal, forward, count, None_Receiver);
 }
@@ -1639,10 +1639,10 @@ _SPI_error_callback(void *arg)
  *	Do a FETCH or MOVE in a cursor
  */
 static void
-_SPI_cursor_operation(Portal portal, bool forward, int64 count,
+_SPI_cursor_operation(Portal portal, bool forward, long count,
 					  DestReceiver *dest)
 {
-	int64		nfetched;
+	long		nfetched;
 
 	/* Check that the portal is valid */
 	if (!PortalIsValid(portal))
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 0377ba6f49f..2ff24296e90 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.563 2006/09/03 00:46:41 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.564 2006/09/03 03:19:44 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -116,7 +116,6 @@ static void doNegateFloat(Value *v);
 %union
 {
 	int					ival;
-	int64				i64val; 
 	char				chr;
 	char				*str;
 	const char			*keyword;
@@ -325,7 +324,6 @@ static void doNegateFloat(Value *v);
 %type <boolean> opt_varying opt_timezone
 
 %type <ival>	Iconst SignedIconst
-%type <i64val>  SignedI64const
 %type <str>		Sconst comment_text
 %type <str>		RoleId opt_granted_by opt_boolean ColId_or_Sconst
 %type <list>	var_list var_list_or_default
@@ -450,7 +448,6 @@ static void doNegateFloat(Value *v);
 /* Special token types, not actually keywords - see the "lex" file */
 %token <str>	IDENT FCONST SCONST BCONST XCONST Op
 %token <ival>	ICONST PARAM
-%token <i64val> I64CONST 
 
 /* precedence: lowest to highest */
 %nonassoc	SET				/* see relation_expr_opt_alias */
@@ -3359,27 +3356,6 @@ fetch_direction:
 					n->howMany = $1;
 					$$ = (Node *)n;
 				}
-			| ABSOLUTE_P SignedI64const
-				{
-						FetchStmt *n = makeNode(FetchStmt);
-						n->direction = FETCH_ABSOLUTE;
-						n->howMany = $2;
-						$$ = (Node *)n;
-				}
-			| RELATIVE_P SignedI64const
-				{
-						FetchStmt *n = makeNode(FetchStmt);
-						n->direction = FETCH_RELATIVE;
-						n->howMany = $2;
-						$$ = (Node *)n;
-				}
-			| SignedI64const
-				{
-						FetchStmt *n = makeNode(FetchStmt);
-						n->direction = FETCH_FORWARD;
-						n->howMany = $1;
-						$$ = (Node *)n;
-				}
 			| ALL
 				{
 					FetchStmt *n = makeNode(FetchStmt);
@@ -3401,13 +3377,6 @@ fetch_direction:
 					n->howMany = $2;
 					$$ = (Node *)n;
 				}
-			| FORWARD SignedI64const
-				{
-						FetchStmt *n = makeNode(FetchStmt);
-						n->direction = FETCH_FORWARD;
-						n->howMany = $2;
-						$$ = (Node *)n;
-				}
 			| FORWARD ALL
 				{
 					FetchStmt *n = makeNode(FetchStmt);
@@ -3429,13 +3398,6 @@ fetch_direction:
 					n->howMany = $2;
 					$$ = (Node *)n;
 				}
-			| BACKWARD SignedI64const
-				{
-						FetchStmt *n = makeNode(FetchStmt);
-						n->direction = FETCH_BACKWARD;
-						n->howMany = $2;
-						$$ = (Node *)n;
-				}
 			| BACKWARD ALL
 				{
 					FetchStmt *n = makeNode(FetchStmt);
@@ -8540,9 +8502,6 @@ RoleId:		ColId									{ $$ = $1; };
 SignedIconst: ICONST								{ $$ = $1; }
 			| '-' ICONST							{ $$ = - $2; }
 		;
-SignedI64const: I64CONST							{ $$ = $1; }
-			| '-' I64CONST							{ $$ = - $2; }
-		;
 
 /*
  * Name classification hierarchy.
diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 2a8ac8de868..c97c9e6ada3 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -24,7 +24,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.136 2006/09/02 18:17:17 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/parser/scan.l,v 1.137 2006/09/03 03:19:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -666,22 +666,6 @@ other			.
 #endif
 						)
 					{
-						/* For Fetch/Move stmt, convert the string into int64 value */
-						if((strcmp(yylval.keyword, "fetch")==0) || (strcmp(yylval.keyword, "move")==0))
-						{
-								int64 int64Val;
-								errno = 0;
-	
-								int64Val =	strtoll(yytext, &endptr, 10);
-								if (*endptr != '\0' || errno == ERANGE)
-								{
-											yylval.str = pstrdup(yytext);
-											return FCONST;
-								}
-								yylval.i64val = int64Val; 
-								return I64CONST;
-						}
-
 						/* integer too large, treat it as a float */
 						yylval.str = pstrdup(yytext);
 						return FCONST;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 62ad35bc00c..6496b981cf2 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.504 2006/09/02 18:17:17 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.505 2006/09/03 03:19:44 momjian Exp $
  *
  * NOTES
  *	  this is the "main" module of the postgres backend and
@@ -1687,7 +1687,7 @@ exec_bind_message(StringInfo input_message)
  * Process an "Execute" message for a portal
  */
 static void
-exec_execute_message(const char *portal_name, int64 max_rows)
+exec_execute_message(const char *portal_name, long max_rows)
 {
 	CommandDest dest;
 	DestReceiver *receiver;
@@ -3308,13 +3308,13 @@ PostgresMain(int argc, char *argv[], const char *username)
 			case 'E':			/* execute */
 				{
 					const char *portal_name;
-					int64			max_rows;
+					int			max_rows;
 
 					/* Set statement_timestamp() */
 					SetCurrentStatementStartTimestamp();
 
 					portal_name = pq_getmsgstring(&input_message);
-					max_rows = pq_getmsgint64(&input_message);
+					max_rows = pq_getmsgint(&input_message, 4);
 					pq_getmsgend(&input_message);
 
 					exec_execute_message(portal_name, max_rows);
diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c
index a5b474104f6..8738d91abdf 100644
--- a/src/backend/tcop/pquery.c
+++ b/src/backend/tcop/pquery.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/tcop/pquery.c,v 1.109 2006/09/03 01:15:40 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/tcop/pquery.c,v 1.110 2006/09/03 03:19:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,18 +38,18 @@ static void ProcessQuery(Query *parsetree,
 			 DestReceiver *dest,
 			 char *completionTag);
 static void FillPortalStore(Portal portal);
-static uint64 RunFromStore(Portal portal, ScanDirection direction, int64 count,
+static uint32 RunFromStore(Portal portal, ScanDirection direction, long count,
 			 DestReceiver *dest);
-static int64 PortalRunSelect(Portal portal, bool forward, int64 count,
+static long PortalRunSelect(Portal portal, bool forward, long count,
 				DestReceiver *dest);
 static void PortalRunUtility(Portal portal, Query *query,
 				 DestReceiver *dest, char *completionTag);
 static void PortalRunMulti(Portal portal,
 			   DestReceiver *dest, DestReceiver *altdest,
 			   char *completionTag);
-static int64 DoPortalRunFetch(Portal portal,
+static long DoPortalRunFetch(Portal portal,
 				 FetchDirection fdirection,
-				 int64 count,
+				 long count,
 				 DestReceiver *dest);
 static void DoPortalRewind(Portal portal);
 
@@ -581,7 +581,7 @@ PortalSetResultFormat(Portal portal, int nFormats, int16 *formats)
  * suspended due to exhaustion of the count parameter.
  */
 bool
-PortalRun(Portal portal, int64 count,
+PortalRun(Portal portal, long count,
 		  DestReceiver *dest, DestReceiver *altdest,
 		  char *completionTag)
 {
@@ -773,15 +773,15 @@ PortalRun(Portal portal, int64 count,
  *
  * Returns number of rows processed (suitable for use in result tag)
  */
-static int64
+static long
 PortalRunSelect(Portal portal,
 				bool forward,
-				int64 count,
+				long count,
 				DestReceiver *dest)
 {
 	QueryDesc  *queryDesc;
 	ScanDirection direction;
-	uint64		nprocessed;
+	uint32		nprocessed;
 
 	/*
 	 * NB: queryDesc will be NULL if we are fetching from a held cursor or a
@@ -834,12 +834,12 @@ PortalRunSelect(Portal portal,
 
 		if (!ScanDirectionIsNoMovement(direction))
 		{
-			int64		oldPos;
+			long		oldPos;
 
 			if (nprocessed > 0)
 				portal->atStart = false;		/* OK to go backward now */
 			if (count == 0 ||
-				(uint64) nprocessed < (uint64) count)
+				(unsigned long) nprocessed < (unsigned long) count)
 				portal->atEnd = true;	/* we retrieved 'em all */
 			oldPos = portal->portalPos;
 			portal->portalPos += nprocessed;
@@ -882,7 +882,7 @@ PortalRunSelect(Portal portal,
 				portal->portalPos++;	/* adjust for endpoint case */
 			}
 			if (count == 0 ||
-				(uint64) nprocessed < (uint64) count)
+				(unsigned long) nprocessed < (unsigned long) count)
 			{
 				portal->atStart = true; /* we retrieved 'em all */
 				portal->portalPos = 0;
@@ -890,7 +890,7 @@ PortalRunSelect(Portal portal,
 			}
 			else
 			{
-				int64		oldPos;
+				long		oldPos;
 
 				oldPos = portal->portalPos;
 				portal->portalPos -= nprocessed;
@@ -958,11 +958,11 @@ FillPortalStore(Portal portal)
  * are run in the caller's memory context (since we have no estate).  Watch
  * out for memory leaks.
  */
-static uint64
-RunFromStore(Portal portal, ScanDirection direction, int64 count,
+static uint32
+RunFromStore(Portal portal, ScanDirection direction, long count,
 			 DestReceiver *dest)
 {
-	int64		current_tuple_count = 0;
+	long		current_tuple_count = 0;
 	TupleTableSlot *slot;
 
 	slot = MakeSingleTupleTableSlot(portal->tupDesc);
@@ -1010,7 +1010,7 @@ RunFromStore(Portal portal, ScanDirection direction, int64 count,
 
 	ExecDropSingleTupleTableSlot(slot);
 
-	return (uint64) current_tuple_count;
+	return (uint32) current_tuple_count;
 }
 
 /*
@@ -1200,13 +1200,13 @@ PortalRunMulti(Portal portal,
  *
  * Returns number of rows processed (suitable for use in result tag)
  */
-int64
+long
 PortalRunFetch(Portal portal,
 			   FetchDirection fdirection,
-			   int64 count,
+			   long count,
 			   DestReceiver *dest)
 {
-	int64		result;
+	long		result;
 	Portal		saveActivePortal;
 	Snapshot	saveActiveSnapshot;
 	ResourceOwner saveResourceOwner;
@@ -1307,10 +1307,10 @@ PortalRunFetch(Portal portal,
  *
  * Returns number of rows processed (suitable for use in result tag)
  */
-static int64
+static long
 DoPortalRunFetch(Portal portal,
 				 FetchDirection fdirection,
-				 int64 count,
+				 long count,
 				 DestReceiver *dest)
 {
 	bool		forward;
@@ -1347,7 +1347,7 @@ DoPortalRunFetch(Portal portal,
 				 * we are.	In any case, we arrange to fetch the target row
 				 * going forwards.
 				 */
-				if (portal->posOverflow || portal->portalPos == FETCH_ALL ||
+				if (portal->posOverflow || portal->portalPos == LONG_MAX ||
 					count - 1 <= portal->portalPos / 2)
 				{
 					DoPortalRewind(portal);
@@ -1357,7 +1357,7 @@ DoPortalRunFetch(Portal portal,
 				}
 				else
 				{
-					int64		pos = portal->portalPos;
+					long		pos = portal->portalPos;
 
 					if (portal->atEnd)
 						pos++;	/* need one extra fetch if off end */
@@ -1469,7 +1469,7 @@ DoPortalRunFetch(Portal portal,
 	 */
 	if (!forward && count == FETCH_ALL && dest->mydest == DestNone)
 	{
-		int64		result = portal->portalPos;
+		long		result = portal->portalPos;
 
 		if (result > 0 && !portal->atEnd)
 			result--;
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h
index b8833b355a1..361fe7c8d1e 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -2,7 +2,7 @@
  *
  * spi.h
  *
- * $PostgreSQL: pgsql/src/include/executor/spi.h,v 1.56 2006/09/02 18:17:17 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/executor/spi.h,v 1.57 2006/09/03 03:19:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -126,8 +126,8 @@ extern void SPI_freetuptable(SPITupleTable *tuptable);
 extern Portal SPI_cursor_open(const char *name, void *plan,
 				Datum *Values, const char *Nulls, bool read_only);
 extern Portal SPI_cursor_find(const char *name);
-extern void SPI_cursor_fetch(Portal portal, bool forward, int64 count);
-extern void SPI_cursor_move(Portal portal, bool forward, int64 count);
+extern void SPI_cursor_fetch(Portal portal, bool forward, long count);
+extern void SPI_cursor_move(Portal portal, bool forward, long count);
 extern void SPI_cursor_close(Portal portal);
 
 extern void AtEOXact_SPI(bool isCommit);
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 71ba4af83b2..40708404fcc 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -7,15 +7,13 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.328 2006/09/03 01:15:40 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.329 2006/09/03 03:19:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 #ifndef PARSENODES_H
 #define PARSENODES_H
 
-#include "limits.h"
-
 #include "nodes/primnodes.h"
 #include "nodes/value.h"
 
@@ -1441,18 +1439,13 @@ typedef enum FetchDirection
 	FETCH_RELATIVE
 } FetchDirection;
 
-#ifdef HAVE_INT64
-#define FETCH_ALL	LLONG_MAX
-#else
 #define FETCH_ALL	LONG_MAX
-#endif
-
 
 typedef struct FetchStmt
 {
 	NodeTag		type;
 	FetchDirection direction;	/* see above */
-	int64		howMany;		/* number of rows, or position argument */
+	long		howMany;		/* number of rows, or position argument */
 	char	   *portalname;		/* name of portal (cursor) */
 	bool		ismove;			/* TRUE if MOVE */
 } FetchStmt;
diff --git a/src/include/tcop/pquery.h b/src/include/tcop/pquery.h
index eeeaf70a6b1..82d2567ecb0 100644
--- a/src/include/tcop/pquery.h
+++ b/src/include/tcop/pquery.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/tcop/pquery.h,v 1.38 2006/09/02 18:17:17 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/tcop/pquery.h,v 1.39 2006/09/03 03:19:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -30,13 +30,13 @@ extern void PortalStart(Portal portal, ParamListInfo params,
 extern void PortalSetResultFormat(Portal portal, int nFormats,
 					  int16 *formats);
 
-extern bool PortalRun(Portal portal, int64 count,
+extern bool PortalRun(Portal portal, long count,
 		  DestReceiver *dest, DestReceiver *altdest,
 		  char *completionTag);
 
-extern int64 PortalRunFetch(Portal portal,
+extern long PortalRunFetch(Portal portal,
 			   FetchDirection fdirection,
-			   int64 count,
+			   long count,
 			   DestReceiver *dest);
 
 #endif   /* PQUERY_H */
diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h
index 8104edbca8f..4a546bdda96 100644
--- a/src/include/utils/portal.h
+++ b/src/include/utils/portal.h
@@ -39,7 +39,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/portal.h,v 1.68 2006/09/02 18:17:18 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/portal.h,v 1.69 2006/09/03 03:19:45 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -173,7 +173,7 @@ typedef struct PortalData
 	bool		atStart;
 	bool		atEnd;
 	bool		posOverflow;
-	int64		portalPos;
+	long		portalPos;
 
 	/* Presentation data, primarily used by the pg_cursors system view */
 	TimestampTz	creation_time;	/* time at which this portal was defined */
-- 
GitLab