Re: Bug in SQL function with returntype void
От | Bruce Momjian |
---|---|
Тема | Re: Bug in SQL function with returntype void |
Дата | |
Msg-id | 200306121733.h5CHXSC14151@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Re: Bug in SQL function with returntype void (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-bugs |
Thanks. That bug looked really weird! --------------------------------------------------------------------------- Tom Lane wrote: > "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); > } > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
В списке pgsql-bugs по дате отправления: