]> granicus.if.org Git - postgresql/commitdiff
Fix SQL function executor for case where last command of a function is
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Jun 2003 17:29:26 +0000 (17:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Jun 2003 17:29:26 +0000 (17:29 +0000)
not a SELECT.  We didn't use to allow that, but we do now.

src/backend/executor/functions.c

index 46d1e51c4b9b9eac600d4ac36cbfa2ea14680fdd..a0e0919fd0b61f01f9545e1c02f0e2d875f6553b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.65 2003/05/08 18:16:36 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.66 2003/06/12 17:29:26 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -262,17 +262,19 @@ postquel_getnext(execution_state *es)
 
        if (es->qd->operation == CMD_UTILITY)
        {
-               /*
-                * Process a utility command. (create, destroy...)      DZ - 30-8-1996
-                */
                ProcessUtility(es->qd->parsetree->utilityStmt, es->qd->dest, NULL);
-               if (!LAST_POSTQUEL_COMMAND(es))
-                       CommandCounterIncrement();
                return (TupleTableSlot *) NULL;
        }
 
-       /* If it's not the last command, just run it to completion */
-       count = (LAST_POSTQUEL_COMMAND(es)) ? 1L : 0L;
+       /*
+        * If it's the function's last command, and it's a SELECT, fetch one
+        * row at a time so we can return the results.  Otherwise just run it
+        * to completion.
+        */
+       if (LAST_POSTQUEL_COMMAND(es) && es->qd->operation == CMD_SELECT)
+               count = 1L;
+       else
+               count = 0L;
 
        return ExecutorRun(es->qd, ForwardScanDirection, count);
 }