Thread: BUG #1371: Short-circuit evaluation on PL/PgSQL
The following bug has been logged online: Bug reference: 1371 Logged by: Aguinaldo Possatto Email address: aguinaldo@aswti.com PostgreSQL version: 8.0 Operating system: Windows XP Description: Short-circuit evaluation on PL/PgSQL Details: an exception is raised when this block is being executed: if ( ((tg_op = 'INSERT') and (new.field is not null)) or ((tg_op = 'DELETE') and (old.field is not null)) ) then ... end if; the error is : "SQL Error: ERRO: record "old" is not assigned yet" but if the evaluation was "short-circuit" this error would not happen.
"Aguinaldo Possatto" <aguinaldo@aswti.com> writes: > an exception is raised when this block is being executed: > if ( ((tg_op = 'INSERT') and > (new.field is not null)) or > ((tg_op = 'DELETE') and > (old.field is not null)) ) > then > ... > end if; > the error is : > "SQL Error: ERRO: record "old" is not assigned yet" > but if the evaluation was "short-circuit" this error would not happen. The evaluation is not short-circuit, and is not going to become so. See for instance http://www.postgresql.org/docs/7.4/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL The particular problem at hand here arises from different issues (specifically that plpgsql has to push down all the variable values it has at hand before the IF expression's evaluation can start) but the fact remains that SQL does not promise short-circuit evaluation. regards, tom lane