Thanks.  That bug looked really weird!

---------------------------------------------------------------------------

Tom Lane wrote:
> =?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])
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to