Fix binary cursors broken by MOVE implementation.
authorVadim B. Mikheev
Mon, 27 Oct 1997 08:55:16 +0000 (08:55 +0000)
committerVadim B. Mikheev
Mon, 27 Oct 1997 08:55:16 +0000 (08:55 +0000)
(Thanks to Bruce for finding what caused problem).

src/backend/commands/command.c

index e259cb141ee396af89fea302fefc6b9e012c00a5..1f80e9e2e0d51392725e92bcfa5bbeb08d9b55f4 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.19 1997/09/29 05:56:10 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.20 1997/10/27 08:55:16 vadim Exp $
  *
  * NOTES
  *   The PortalExecutorHeapMemory crap needs to be eliminated
@@ -97,10 +97,10 @@ PerformPortalFetch(char *name,
                   char *tag,
                   CommandDest dest)
 {
-   Portal      portal;
-   int         feature;
-   QueryDesc   queryDesc;
-   MemoryContext context;
+   Portal          portal;
+   int             feature;
+   QueryDesc      *queryDesc;
+   MemoryContext   context;
 
    /* ----------------
     *  sanity checks
@@ -147,11 +147,19 @@ PerformPortalFetch(char *name,
     *  tell the destination to prepare to recieve some tuples
     * ----------------
     */
-   memcpy (&queryDesc, PortalGetQueryDesc(portal), sizeof (queryDesc));
-   queryDesc.dest = dest;
+   queryDesc = PortalGetQueryDesc(portal);
+   
+   if ( dest == None )     /* MOVE */
+   {
+       QueryDesc   *qdesc = (QueryDesc *) palloc (sizeof (QueryDesc));
+       
+       memcpy (qdesc, queryDesc, sizeof (QueryDesc));
+       qdesc->dest = dest;
+       queryDesc = qdesc;
+   }
    
    BeginCommand(name,
-                queryDesc.operation,
+                queryDesc->operation,
                 portal->attinfo,       /* QueryDescGetTypeInfo(queryDesc),
                                         * */
                 false,         /* portal fetches don't end up in
@@ -168,8 +176,11 @@ PerformPortalFetch(char *name,
    PortalExecutorHeapMemory = (MemoryContext)
        PortalGetHeapMemory(portal);
 
-   ExecutorRun(&queryDesc, PortalGetState(portal), feature, count);
+   ExecutorRun(queryDesc, PortalGetState(portal), feature, count);
 
+   if ( dest == None )     /* MOVE */
+       pfree (queryDesc);
+   
    /* ----------------
     * Note: the "end-of-command" tag is returned by higher-level
     *       utility code