From 5a447b4a260a7a9bce9356a4d107b03aa136e933 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" Date: Mon, 29 Sep 1997 05:59:16 +0000 Subject: [PATCH] MOVE implementation. --- src/backend/commands/command.c | 12 ++++--- src/backend/parser/gram.y | 59 +++++++++++----------------------- src/backend/tcop/utility.c | 7 ++-- 3 files changed, 29 insertions(+), 49 deletions(-) diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index 039c3719e5..e259cb141e 100644 --- a/src/backend/commands/command.c +++ b/src/backend/commands/command.c @@ -7,7 +7,7 @@ * * * 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 * The PortalExecutorHeapMemory crap needs to be eliminated @@ -99,7 +99,7 @@ PerformPortalFetch(char *name, { Portal portal; int feature; - QueryDesc *queryDesc; + QueryDesc queryDesc; MemoryContext context; /* ---------------- @@ -147,9 +147,11 @@ PerformPortalFetch(char *name, * tell the destination to prepare to recieve some tuples * ---------------- */ - queryDesc = PortalGetQueryDesc(portal); + memcpy (&queryDesc, PortalGetQueryDesc(portal), sizeof (queryDesc)); + queryDesc.dest = dest; + BeginCommand(name, - queryDesc->operation, + queryDesc.operation, portal->attinfo, /* QueryDescGetTypeInfo(queryDesc), * */ false, /* portal fetches don't end up in @@ -166,7 +168,7 @@ PerformPortalFetch(char *name, PortalExecutorHeapMemory = (MemoryContext) 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 diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 90afc5349a..626c8b8b5f 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * 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 * AUTHOR DATE MAJOR EVENT @@ -107,7 +107,7 @@ static char *FlattenStringList(List *list); AddAttrStmt, ClosePortalStmt, CopyStmt, CreateStmt, CreateSeqStmt, DefineStmt, DestroyStmt, ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt, - IndexStmt, MoveStmt, ListenStmt, OptimizableStmt, + IndexStmt, ListenStmt, OptimizableStmt, ProcedureStmt, PurgeStmt, RecipeStmt, RemoveAggrStmt, RemoveOperStmt, RemoveFuncStmt, RemoveStmt, RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt, @@ -162,7 +162,7 @@ static char *FlattenStringList(List *list); %type copy_dirn, archive_type, OptArchiveType, OptArchiveLocation, def_type, opt_direction, remove_type, opt_column, event -%type OptLocation, opt_move_where, fetch_how_many +%type OptLocation, fetch_how_many %type OptSeqList %type OptSeqElem @@ -299,7 +299,6 @@ stmt : AddAttrStmt | FetchStmt | GrantStmt | IndexStmt - | MoveStmt | ListenStmt | ProcedureStmt | PurgeStmt @@ -995,7 +994,7 @@ DestroyStmt: DROP TABLE relation_name_list /***************************************************************************** * * QUERY: - * fetch [forward | backward] [number | all ] [ in ] + * fetch/move [forward | backward] [number | all ] [ in ] * *****************************************************************************/ @@ -1005,6 +1004,16 @@ FetchStmt: FETCH opt_direction fetch_how_many opt_portal_name n->direction = $2; n->howMany = $3; 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; } ; @@ -1021,6 +1030,10 @@ fetch_how_many: Iconst | /*EMPTY*/ { $$ = 1; /*default*/ } ; +opt_portal_name: IN name { $$ = $2;} + | /*EMPTY*/ { $$ = NULL; } + ; + /***************************************************************************** * * QUERY: @@ -1119,42 +1132,6 @@ RevokeStmt: REVOKE privileges ON relation_name_list FROM grantee } ; -/***************************************************************************** - * - * QUERY: - * move [] [] [] - * - *****************************************************************************/ - -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: diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 76f5865021..0cdade1b11 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -9,7 +9,7 @@ * * * 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; int count; - commandTag = "FETCH"; + commandTag = (stmt->ismove) ? "MOVE" : "FETCH"; CHECK_IF_ABORTED(); forward = (bool) (stmt->direction == FORWARD); @@ -149,7 +149,8 @@ ProcessUtility(Node *parsetree, */ count = stmt->howMany; - PerformPortalFetch(portalName, forward, count, commandTag, dest); + PerformPortalFetch(portalName, forward, count, commandTag, + (stmt->ismove) ? None : dest); /* /dev/null for MOVE */ } break;