Commit 5a447b4a authored by Vadim B. Mikheev's avatar Vadim B. Mikheev

MOVE implementation.

parent 4b9fb266
...@@ -7,7 +7,7 @@ ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 @@ ...@@ -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); ...@@ -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); ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 @@ ...@@ -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, ...@@ -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, ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment