OSDN Git Service

MOVE implementation.
authorVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 29 Sep 1997 05:59:16 +0000 (05:59 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 29 Sep 1997 05:59:16 +0000 (05:59 +0000)
src/backend/commands/command.c
src/backend/parser/gram.y
src/backend/tcop/utility.c

index 039c371..e259cb1 100644 (file)
@@ -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
index 90afc53..626c8b8 100644 (file)
@@ -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>]
index 76f5865..0cdade1 100644 (file)
@@ -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;