Quantcast

short ciruit logic of plpgsql in 8.2

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

short ciruit logic of plpgsql in 8.2

Richard Broersma Jr
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/
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: short ciruit logic of plpgsql in 8.2

Pavel Stehule
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 <[hidden email]>:

> 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/
>

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [hidden email] so that your
       message can get through to the mailing list cleanly
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: short ciruit logic of plpgsql in 8.2

Tom Lane-2
In reply to this post by Richard Broersma Jr
Richard Broersma Jr <[hidden email]> 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 [hidden email] so that your
       message can get through to the mailing list cleanly
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: short ciruit logic of plpgsql in 8.2

Ian Harding
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


On 5/17/07, Tom Lane <[hidden email]> wrote:

> Richard Broersma Jr <[hidden email]> 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 [hidden email] so that your
>        message can get through to the mailing list cleanly
>

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Loading...