=?iso-8859-2?Q?=22Z=EDka_Ale=B9=2C_Ing=2E=22?= <[EMAIL PROTECTED]> writes:
>       I tried the example "CREATE FUNCTION clean_EMP () RETURNS void AS
> 'DELETE FROM EMP WHERE EMP.salary <= 0' LANGUAGE SQL;" in chapter 9.2.1 of
> Programmer's guide.
>       When the function was invoked, it delete only one tuple, although
> there were more tuples satisfying the WHERE condition. During secont
> invocation it deleted next tuple and so on.

Good catch.  I've applied the attached patch.

                        regards, tom lane


*** src/backend/executor/functions.c.orig       Wed Sep  4 16:31:18 2002
--- src/backend/executor/functions.c    Thu Jun 12 13:26:12 2003
***************
*** 273,289 ****
  
        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;
  
        return ExecutorRun(es->qd, es->estate, ForwardScanDirection, count);
  }
--- 273,291 ----
  
        if (es->qd->operation == CMD_UTILITY)
        {
                ProcessUtility(es->qd->parsetree->utilityStmt, es->qd->dest, NULL);
                return (TupleTableSlot *) NULL;
        }
  
!       /*
!        * 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);
  }

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to