Re: Bug in SQL function with returntype void

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Bug in SQL function with returntype void
Дата
Msg-id 19595.1055439058@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Bug in SQL function with returntype void  ("Zíka Aleš, Ing."<Ales.Zika@pel.br.ds.mfcr.cz>)
Ответы Re: Bug in SQL function with returntype void  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-bugs
"Zíka Aleš, Ing." <Ales.Zika@pel.br.ds.mfcr.cz> 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); }


В списке pgsql-bugs по дате отправления:

Предыдущее
От: Dmitry Tkach
Дата:
Сообщение: Re: pg_dumpall not working in batch
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: Bug in SQL function with returntype void