]> granicus.if.org Git - postgresql/commitdiff
Fix binary cursors broken by MOVE implementation.
authorVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 27 Oct 1997 08:55:16 +0000 (08:55 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
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