Fix SQL function executor for case where last command of a function is
authorTom Lane <[email protected]>
Thu, 12 Jun 2003 17:29:37 +0000 (17:29 +0000)
committerTom Lane <[email protected]>
Thu, 12 Jun 2003 17:29:37 +0000 (17:29 +0000)
not a SELECT.  We didn't use to allow that, but we do now.

src/backend/executor/functions.c

index b8bf811a5e8a283194fc2b66f473b65461e81188..9ee7ae1fca1fa0c05e84714bd0e33ee302998748 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.57 2002/09/04 20:31:18 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.57.2.1 2003/06/12 17:29:37 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -273,17 +273,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, es->estate, ForwardScanDirection, count);
 }