mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
MOVE implementation.
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.18 1997/09/20 16:14:05 thomas Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.19 1997/09/29 05:56:10 vadim Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* The PortalExecutorHeapMemory crap needs to be eliminated
|
* The PortalExecutorHeapMemory crap needs to be eliminated
|
||||||
@ -99,7 +99,7 @@ PerformPortalFetch(char *name,
|
|||||||
{
|
{
|
||||||
Portal portal;
|
Portal portal;
|
||||||
int feature;
|
int feature;
|
||||||
QueryDesc *queryDesc;
|
QueryDesc queryDesc;
|
||||||
MemoryContext context;
|
MemoryContext context;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -147,9 +147,11 @@ PerformPortalFetch(char *name,
|
|||||||
* tell the destination to prepare to recieve some tuples
|
* tell the destination to prepare to recieve some tuples
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
queryDesc = PortalGetQueryDesc(portal);
|
memcpy (&queryDesc, PortalGetQueryDesc(portal), sizeof (queryDesc));
|
||||||
|
queryDesc.dest = dest;
|
||||||
|
|
||||||
BeginCommand(name,
|
BeginCommand(name,
|
||||||
queryDesc->operation,
|
queryDesc.operation,
|
||||||
portal->attinfo, /* QueryDescGetTypeInfo(queryDesc),
|
portal->attinfo, /* QueryDescGetTypeInfo(queryDesc),
|
||||||
* */
|
* */
|
||||||
false, /* portal fetches don't end up in
|
false, /* portal fetches don't end up in
|
||||||
@ -166,7 +168,7 @@ PerformPortalFetch(char *name,
|
|||||||
PortalExecutorHeapMemory = (MemoryContext)
|
PortalExecutorHeapMemory = (MemoryContext)
|
||||||
PortalGetHeapMemory(portal);
|
PortalGetHeapMemory(portal);
|
||||||
|
|
||||||
ExecutorRun(queryDesc, PortalGetState(portal), feature, count);
|
ExecutorRun(&queryDesc, PortalGetState(portal), feature, count);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* Note: the "end-of-command" tag is returned by higher-level
|
* Note: the "end-of-command" tag is returned by higher-level
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.52 1997/09/26 15:09:11 thomas Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.53 1997/09/29 05:58:12 vadim Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -107,7 +107,7 @@ static char *FlattenStringList(List *list);
|
|||||||
AddAttrStmt, ClosePortalStmt,
|
AddAttrStmt, ClosePortalStmt,
|
||||||
CopyStmt, CreateStmt, CreateSeqStmt, DefineStmt, DestroyStmt,
|
CopyStmt, CreateStmt, CreateSeqStmt, DefineStmt, DestroyStmt,
|
||||||
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
|
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
|
||||||
IndexStmt, MoveStmt, ListenStmt, OptimizableStmt,
|
IndexStmt, ListenStmt, OptimizableStmt,
|
||||||
ProcedureStmt, PurgeStmt,
|
ProcedureStmt, PurgeStmt,
|
||||||
RecipeStmt, RemoveAggrStmt, RemoveOperStmt, RemoveFuncStmt, RemoveStmt,
|
RecipeStmt, RemoveAggrStmt, RemoveOperStmt, RemoveFuncStmt, RemoveStmt,
|
||||||
RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
|
RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
|
||||||
@ -162,7 +162,7 @@ static char *FlattenStringList(List *list);
|
|||||||
%type <ival> copy_dirn, archive_type, OptArchiveType, OptArchiveLocation,
|
%type <ival> copy_dirn, archive_type, OptArchiveType, OptArchiveLocation,
|
||||||
def_type, opt_direction, remove_type, opt_column, event
|
def_type, opt_direction, remove_type, opt_column, event
|
||||||
|
|
||||||
%type <ival> OptLocation, opt_move_where, fetch_how_many
|
%type <ival> OptLocation, fetch_how_many
|
||||||
|
|
||||||
%type <list> OptSeqList
|
%type <list> OptSeqList
|
||||||
%type <defelt> OptSeqElem
|
%type <defelt> OptSeqElem
|
||||||
@ -299,7 +299,6 @@ stmt : AddAttrStmt
|
|||||||
| FetchStmt
|
| FetchStmt
|
||||||
| GrantStmt
|
| GrantStmt
|
||||||
| IndexStmt
|
| IndexStmt
|
||||||
| MoveStmt
|
|
||||||
| ListenStmt
|
| ListenStmt
|
||||||
| ProcedureStmt
|
| ProcedureStmt
|
||||||
| PurgeStmt
|
| PurgeStmt
|
||||||
@ -995,7 +994,7 @@ DestroyStmt: DROP TABLE relation_name_list
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* QUERY:
|
* QUERY:
|
||||||
* fetch [forward | backward] [number | all ] [ in <portalname> ]
|
* fetch/move [forward | backward] [number | all ] [ in <portalname> ]
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
@ -1005,6 +1004,16 @@ FetchStmt: FETCH opt_direction fetch_how_many opt_portal_name
|
|||||||
n->direction = $2;
|
n->direction = $2;
|
||||||
n->howMany = $3;
|
n->howMany = $3;
|
||||||
n->portalname = $4;
|
n->portalname = $4;
|
||||||
|
n->ismove = false;
|
||||||
|
$$ = (Node *)n;
|
||||||
|
}
|
||||||
|
| MOVE opt_direction fetch_how_many opt_portal_name
|
||||||
|
{
|
||||||
|
FetchStmt *n = makeNode(FetchStmt);
|
||||||
|
n->direction = $2;
|
||||||
|
n->howMany = $3;
|
||||||
|
n->portalname = $4;
|
||||||
|
n->ismove = true;
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -1021,6 +1030,10 @@ fetch_how_many: Iconst
|
|||||||
| /*EMPTY*/ { $$ = 1; /*default*/ }
|
| /*EMPTY*/ { $$ = 1; /*default*/ }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
opt_portal_name: IN name { $$ = $2;}
|
||||||
|
| /*EMPTY*/ { $$ = NULL; }
|
||||||
|
;
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* QUERY:
|
* QUERY:
|
||||||
@ -1119,42 +1132,6 @@ RevokeStmt: REVOKE privileges ON relation_name_list FROM grantee
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
/*****************************************************************************
|
|
||||||
*
|
|
||||||
* QUERY:
|
|
||||||
* move [<dirn>] [<whereto>] [<portalname>]
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
MoveStmt: MOVE opt_direction opt_move_where opt_portal_name
|
|
||||||
{
|
|
||||||
MoveStmt *n = makeNode(MoveStmt);
|
|
||||||
n->direction = $2;
|
|
||||||
n->to = FALSE;
|
|
||||||
n->where = $3;
|
|
||||||
n->portalname = $4;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
| MOVE opt_direction TO Iconst opt_portal_name
|
|
||||||
{
|
|
||||||
MoveStmt *n = makeNode(MoveStmt);
|
|
||||||
n->direction = $2;
|
|
||||||
n->to = TRUE;
|
|
||||||
n->where = $4;
|
|
||||||
n->portalname = $5;
|
|
||||||
$$ = (Node *)n;
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
opt_move_where: Iconst { $$ = $1; }
|
|
||||||
| /*EMPTY*/ { $$ = 1; /* default */ }
|
|
||||||
;
|
|
||||||
|
|
||||||
opt_portal_name: IN name { $$ = $2;}
|
|
||||||
| /*EMPTY*/ { $$ = NULL; }
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* QUERY:
|
* QUERY:
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.24 1997/09/08 21:47:58 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.25 1997/09/29 05:59:16 vadim Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -139,7 +139,7 @@ ProcessUtility(Node *parsetree,
|
|||||||
bool forward;
|
bool forward;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
commandTag = "FETCH";
|
commandTag = (stmt->ismove) ? "MOVE" : "FETCH";
|
||||||
CHECK_IF_ABORTED();
|
CHECK_IF_ABORTED();
|
||||||
|
|
||||||
forward = (bool) (stmt->direction == FORWARD);
|
forward = (bool) (stmt->direction == FORWARD);
|
||||||
@ -149,7 +149,8 @@ ProcessUtility(Node *parsetree,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
count = stmt->howMany;
|
count = stmt->howMany;
|
||||||
PerformPortalFetch(portalName, forward, count, commandTag, dest);
|
PerformPortalFetch(portalName, forward, count, commandTag,
|
||||||
|
(stmt->ismove) ? None : dest); /* /dev/null for MOVE */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user