summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2006-09-03 03:19:45 +0000
committerBruce Momjian2006-09-03 03:19:45 +0000
commit645a9996c5a7a9c207e4c35cfb2f5fb1c756e5b9 (patch)
tree1f777338b4161c6761536d7ce73a7435fa01c8c3
parent10bdda49e206b6331a9efbe1bd88ee20234f9b6a (diff)
Revert FETCH/MOVE int64 patch. Was using incorrect checks for
fetch/move in scan.l.
-rw-r--r--src/backend/commands/portalcmds.c4
-rw-r--r--src/backend/executor/spi.c10
-rw-r--r--src/backend/parser/gram.y41
-rw-r--r--src/backend/parser/scan.l16
-rw-r--r--src/backend/tcop/postgres.c6
-rw-r--r--src/backend/tcop/pquery.c48
-rw-r--r--src/include/executor/spi.h4
-rw-r--r--src/include/nodes/parsenodes.h9
-rw-r--r--src/include/tcop/pquery.h6
-rw-r--r--src/include/utils/portal.h2
10 files changed, 41 insertions, 105 deletions
diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c
index 48f32d5388..21e9e857bd 100644
--- a/src/backend/commands/portalcmds.c
+++ b/src/backend/commands/portalcmds.c
@@ -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 ee06535068..db70a65ce0 100644
--- a/src/backend/executor/spi.c
+++ b/src/backend/executor/spi.c
@@ -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 42bf76df11..8a6add011d 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -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 7e91d0f758..19675138c8 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -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 587534abd3..eee4e227f5 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -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 8a40f10609..a4a5932c74 100644
--- a/src/backend/tcop/pquery.c
+++ b/src/backend/tcop/pquery.c
@@ -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 7721b2bfe6..e57329e53d 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -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 ddf534d4ab..585f270dbe 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -14,8 +14,6 @@
#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 947b29ebb7..6badc315f2 100644
--- a/src/include/tcop/pquery.h
+++ b/src/include/tcop/pquery.h
@@ -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 7f5d9aa2cd..5e08d3f590 100644
--- a/src/include/utils/portal.h
+++ b/src/include/utils/portal.h
@@ -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 */