short ciruit logic of plpgsql in 8.2

Started by Richard Broersma Jralmost 19 years ago4 messagesgeneral
Jump to latest
#1Richard Broersma Jr
rabroersma@yahoo.com

Does anyone know if logic operations in plpgsql are short circuited in 8.2?

Regards,
Richard Broersma Jr.

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Richard Broersma Jr (#1)
Re: short ciruit logic of plpgsql in 8.2

hello,

it depends on SQL. plpgsql hasn't own arithmetic unit. You can test it simply:

postgres=# create or replace function a() returns bool as $$ begin
raise notice 'a'; return true; end$$ language plpgsql;
CREATE FUNCTION
postgres=# create or replace function b() returns bool as $$ begin
raise notice 'a'; return true; end$$ language plpgsql;
CREATE FUNCTION
postgres=# select a() or b();
NOTICE: a
?column?
----------
t
(1 row)

result: statements are short circuited.

2007/5/17, Richard Broersma Jr <rabroersma@yahoo.com>:

Show quoted text

Does anyone know if logic operations in plpgsql are short circuited in 8.2?

Regards,
Richard Broersma Jr.

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org/

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Richard Broersma Jr (#1)
Re: short ciruit logic of plpgsql in 8.2

Richard Broersma Jr <rabroersma@yahoo.com> writes:

Does anyone know if logic operations in plpgsql are short circuited in 8.2?

They are often optimized, but if you expect "short circuiting" following
exactly the rules of, say, C, you are likely to be disappointed. See
the manual:

http://www.postgresql.org/docs/8.2/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL

regards, tom lane

#4Ian Harding
harding.ian@gmail.com
In reply to: Tom Lane (#3)
Re: short ciruit logic of plpgsql in 8.2

This keeps biting me. In a trigger function for INSERT OR UPDATE if you try

IF TG_OP = 'UPDATE' AND OLD.foo = 'bar' THEN
...

it will blow up on inserts because there is no OLD. I always expect
this to short circuit and am always disappointed. Easy fix, of
course...

IF TG_OP = 'UPDATE' THEN
IF OLD.foo = 'bar' THEN
...

In case this was what the OP was asking about in particular, it still
happens to me in 8.2

- Ian

Show quoted text

On 5/17/07, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Richard Broersma Jr <rabroersma@yahoo.com> writes:

Does anyone know if logic operations in plpgsql are short circuited in 8.2?

They are often optimized, but if you expect "short circuiting" following
exactly the rules of, say, C, you are likely to be disappointed. See
the manual:

http://www.postgresql.org/docs/8.2/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly