Re: Does psql evaluate OR conditions in order? - Mailing list pgsql-novice

From Tom Lane
Subject Re: Does psql evaluate OR conditions in order?
Date
Msg-id 3039.1358372410@sss.pgh.pa.us
Whole thread Raw
In response to Does psql evaluate OR conditions in order?  (HideMe <r36@tara-lu.com>)
Responses Re: Does psql evaluate OR conditions in order?
Re: Does psql evaluate OR conditions in order?
List pgsql-novice
HideMe <r36@tara-lu.com> writes:
> Postgres 9.1
> Ubuntu something.

> We have a stored procedure that performs the following evaluations:

> IF ST_Intersects(line1, line2) OR ST_Intersects(line3, line4) THEN
>     do stuff
> ELSIF ST_Intersects(line5, line6) OR ST_Intersects(line7, line8) THEN
>     do stuffB
> END IF;

> 98% of the time the 2nd half of these IF statements will never be true.
> ST_Intersects is an expensive operations to perform.

> Given we're executing this across a lot of data... avoiding expensive
> calls is a good idea.
> So, can we count on the evaluation of the 1st half of the IF's being
> done first before trying the 2nd half,

In principle the order of ORs is not guaranteed, but that mainly has to
do with execution of query WHERE clauses, wherein the optimizer will
feel free to move sub-clauses to different relations, join levels, etc.
I think you're reasonably safe to assume that OR is left-to-right in
this simple context.

> or should we re-write the IF/ELSE to

> IF ST_Intersects(line1, line2) THEN
>     do stuff
> ELSIF ST_Intersects(line5, line6) THEN
>     do stuffB
> ELSIF ST_Intersects(line3, line4) THEN
>     do stuff
> ELSIF ST_Intersects(line7, line8) THEN
>     do stuffB
> END IF;

That doesn't look like it produces quite the same results ...

            regards, tom lane


pgsql-novice by date:

Previous
From: HideMe
Date:
Subject: Does psql evaluate OR conditions in order?
Next
From: Roxanne Reid-Bennett
Date:
Subject: Re: Does psql evaluate OR conditions in order?