Ensure that a plpgsql LOOP with an empty body still executes at least
one CHECK_FOR_INTERRUPTS() call, so that you can control-C out of the loop. Reported by Merlin Moncure.
This commit is contained in:
parent
7d3ab8ac55
commit
18feafcc59
@ -3,7 +3,7 @@
|
|||||||
* procedural language
|
* procedural language
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.153 2005/10/15 02:49:49 momjian Exp $
|
* $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.154 2005/10/24 15:10:22 tgl Exp $
|
||||||
*
|
*
|
||||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||||
*
|
*
|
||||||
@ -974,6 +974,17 @@ exec_stmts(PLpgSQL_execstate * estate, List *stmts)
|
|||||||
{
|
{
|
||||||
ListCell *s;
|
ListCell *s;
|
||||||
|
|
||||||
|
if (stmts == NIL)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Ensure we do a CHECK_FOR_INTERRUPTS() even though there is no
|
||||||
|
* statement. This prevents hangup in a tight loop if, for instance,
|
||||||
|
* there is a LOOP construct with an empty body.
|
||||||
|
*/
|
||||||
|
CHECK_FOR_INTERRUPTS();
|
||||||
|
return PLPGSQL_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
foreach(s, stmts)
|
foreach(s, stmts)
|
||||||
{
|
{
|
||||||
PLpgSQL_stmt *stmt = (PLpgSQL_stmt *) lfirst(s);
|
PLpgSQL_stmt *stmt = (PLpgSQL_stmt *) lfirst(s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user