mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Make MOVE/FETCH 0 actually move/fetch 0. Add MOVE LAST to move to end
of cursor.
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/move.sgml,v 1.13 2002/04/21 19:02:39 thomas Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/move.sgml,v 1.14 2002/11/13 00:44:08 momjian Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -21,7 +21,8 @@ PostgreSQL documentation
|
|||||||
<date>1999-07-20</date>
|
<date>1999-07-20</date>
|
||||||
</refsynopsisdivinfo>
|
</refsynopsisdivinfo>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
MOVE [ <replaceable class="PARAMETER">direction</replaceable> ] [ <replaceable class="PARAMETER">count</replaceable> ]
|
MOVE [ <replaceable class="PARAMETER">direction</replaceable> ]
|
||||||
|
{<replaceable class="PARAMETER">count</replaceable> | LAST }
|
||||||
{ IN | FROM } <replaceable class="PARAMETER">cursor</replaceable>
|
{ IN | FROM } <replaceable class="PARAMETER">cursor</replaceable>
|
||||||
</synopsis>
|
</synopsis>
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
@ -37,8 +38,9 @@ MOVE [ <replaceable class="PARAMETER">direction</replaceable> ] [ <replaceable c
|
|||||||
<command>MOVE</command> allows a user to move cursor position a specified
|
<command>MOVE</command> allows a user to move cursor position a specified
|
||||||
number of rows.
|
number of rows.
|
||||||
<command>MOVE</command> works like the <command>FETCH</command> command,
|
<command>MOVE</command> works like the <command>FETCH</command> command,
|
||||||
but only positions the cursor and does
|
but only positions the cursor and does not return rows.
|
||||||
not return rows.
|
<replaceable class="PARAMETER">LAST</replaceable> moves to the end
|
||||||
|
of the cursor.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Refer to
|
Refer to
|
||||||
|
@ -8,13 +8,15 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/portalcmds.c,v 1.3 2002/09/04 20:31:15 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/portalcmds.c,v 1.4 2002/11/13 00:44:08 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include "commands/portalcmds.h"
|
#include "commands/portalcmds.h"
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
|
|
||||||
@ -55,7 +57,7 @@ PortalCleanup(Portal portal)
|
|||||||
*
|
*
|
||||||
* name: name of portal
|
* name: name of portal
|
||||||
* forward: forward or backward fetch?
|
* forward: forward or backward fetch?
|
||||||
* count: # of tuples to fetch (0 implies all)
|
* count: # of tuples to fetch
|
||||||
* dest: where to send results
|
* dest: where to send results
|
||||||
* completionTag: points to a buffer of size COMPLETION_TAG_BUFSIZE
|
* completionTag: points to a buffer of size COMPLETION_TAG_BUFSIZE
|
||||||
* in which to store a command completion status string.
|
* in which to store a command completion status string.
|
||||||
@ -100,6 +102,14 @@ PerformPortalFetch(char *name,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If zero count, we are done */
|
||||||
|
if (count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Internally, zero count processes all portal rows */
|
||||||
|
if (count == INT_MAX)
|
||||||
|
count = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* switch into the portal context
|
* switch into the portal context
|
||||||
*/
|
*/
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.185 2002/11/13 00:39:46 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.186 2002/11/13 00:44:08 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1116,7 +1116,8 @@ lnext: ;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* check our tuple count.. if we've processed the proper number
|
* check our tuple count.. if we've processed the proper number
|
||||||
* then quit, else loop again and process more tuples..
|
* then quit, else loop again and process more tuples. Zero
|
||||||
|
* number_tuples means no limit.
|
||||||
*/
|
*/
|
||||||
current_tuple_count++;
|
current_tuple_count++;
|
||||||
if (numberTuples == current_tuple_count)
|
if (numberTuples == current_tuple_count)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.376 2002/11/11 22:19:23 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.377 2002/11/13 00:44:08 momjian Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -49,6 +49,7 @@
|
|||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
#include "access/htup.h"
|
#include "access/htup.h"
|
||||||
#include "catalog/index.h"
|
#include "catalog/index.h"
|
||||||
@ -358,7 +359,7 @@ static void doNegateFloat(Value *v);
|
|||||||
|
|
||||||
KEY
|
KEY
|
||||||
|
|
||||||
LANCOMPILER LANGUAGE LEADING LEFT LEVEL LIKE LIMIT
|
LANCOMPILER LANGUAGE LAST LEADING LEFT LEVEL LIKE LIMIT
|
||||||
LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
|
LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
|
||||||
LOCK_P
|
LOCK_P
|
||||||
|
|
||||||
@ -2729,8 +2730,8 @@ direction: FORWARD { $$ = FORWARD; }
|
|||||||
fetch_how_many:
|
fetch_how_many:
|
||||||
Iconst { $$ = $1; }
|
Iconst { $$ = $1; }
|
||||||
| '-' Iconst { $$ = - $2; }
|
| '-' Iconst { $$ = - $2; }
|
||||||
/* 0 means fetch all tuples*/
|
| ALL { $$ = INT_MAX; }
|
||||||
| ALL { $$ = 0; }
|
| LAST { $$ = INT_MAX; }
|
||||||
| NEXT { $$ = 1; }
|
| NEXT { $$ = 1; }
|
||||||
| PRIOR { $$ = -1; }
|
| PRIOR { $$ = -1; }
|
||||||
;
|
;
|
||||||
@ -7060,6 +7061,7 @@ unreserved_keyword:
|
|||||||
| KEY
|
| KEY
|
||||||
| LANGUAGE
|
| LANGUAGE
|
||||||
| LANCOMPILER
|
| LANCOMPILER
|
||||||
|
| LAST
|
||||||
| LEVEL
|
| LEVEL
|
||||||
| LISTEN
|
| LISTEN
|
||||||
| LOAD
|
| LOAD
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.129 2002/11/11 22:19:23 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.130 2002/11/13 00:44:09 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -172,6 +172,7 @@ static const ScanKeyword ScanKeywords[] = {
|
|||||||
{"key", KEY},
|
{"key", KEY},
|
||||||
{"lancompiler", LANCOMPILER},
|
{"lancompiler", LANCOMPILER},
|
||||||
{"language", LANGUAGE},
|
{"language", LANGUAGE},
|
||||||
|
{"last", LAST},
|
||||||
{"leading", LEADING},
|
{"leading", LEADING},
|
||||||
{"left", LEFT},
|
{"left", LEFT},
|
||||||
{"level", LEVEL},
|
{"level", LEVEL},
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.180 2002/10/21 20:31:52 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.181 2002/11/13 00:44:09 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -262,9 +262,8 @@ ProcessUtility(Node *parsetree,
|
|||||||
forward = (bool) (stmt->direction == FORWARD);
|
forward = (bool) (stmt->direction == FORWARD);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* parser ensures that count is >= 0 and 'fetch ALL' -> 0
|
* parser ensures that count is >= 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
count = stmt->howMany;
|
count = stmt->howMany;
|
||||||
PerformPortalFetch(portalName, forward, count,
|
PerformPortalFetch(portalName, forward, count,
|
||||||
(stmt->ismove) ? None : dest,
|
(stmt->ismove) ? None : dest,
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: portalcmds.h,v 1.2 2002/09/04 20:31:42 momjian Exp $
|
* $Id: portalcmds.h,v 1.3 2002/11/13 00:44:09 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* PerformPortalFetch
|
* PerformPortalFetch
|
||||||
* Performs the POSTQUEL function FETCH. Fetches count (or all if 0)
|
* Performs the POSTQUEL function FETCH. Fetches count
|
||||||
* tuples in portal with name in the forward direction iff goForward.
|
* tuples in portal with name in the forward direction iff goForward.
|
||||||
*
|
*
|
||||||
* Exceptions:
|
* Exceptions:
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: parsenodes.h,v 1.212 2002/11/11 22:19:24 tgl Exp $
|
* $Id: parsenodes.h,v 1.213 2002/11/13 00:44:09 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1277,7 +1277,7 @@ typedef struct FetchStmt
|
|||||||
{
|
{
|
||||||
NodeTag type;
|
NodeTag type;
|
||||||
int direction; /* FORWARD or BACKWARD */
|
int direction; /* FORWARD or BACKWARD */
|
||||||
int howMany; /* amount to fetch ("ALL" --> 0) */
|
int howMany; /* amount to fetch */
|
||||||
char *portalname; /* name of portal (cursor) */
|
char *portalname; /* name of portal (cursor) */
|
||||||
bool ismove; /* TRUE if MOVE */
|
bool ismove; /* TRUE if MOVE */
|
||||||
} FetchStmt;
|
} FetchStmt;
|
||||||
|
Reference in New Issue
Block a user