aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1997-09-29 05:59:16 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1997-09-29 05:59:16 +0000
commit5a447b4a260a7a9bce9356a4d107b03aa136e933 (patch)
treecbf87c22b2cabfa92d4a748c2235072326ce81fb
parent4b9fb266481783aabfa5afca9f6081084bf5f1e1 (diff)
downloadpostgresql-5a447b4a260a7a9bce9356a4d107b03aa136e933.tar.gz
postgresql-5a447b4a260a7a9bce9356a4d107b03aa136e933.zip
MOVE implementation.
-rw-r--r--src/backend/commands/command.c12
-rw-r--r--src/backend/parser/gram.y59
-rw-r--r--src/backend/tcop/utility.c7
3 files changed, 29 insertions, 49 deletions
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index 039c3719e5a..e259cb141ee 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 90afc5349ab..626c8b8b5fd 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 <ival> copy_dirn, archive_type, OptArchiveType, OptArchiveLocation,
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 <defelt> 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 <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->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:
@@ -1122,42 +1135,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:
* define [archive] index <indexname> on <relname>
* using <access> "(" (<col> with <op>)+ ")" [with
* <target_list>]
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 76f5865021b..0cdade1b119 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;