Re: plpgsql and logical expression evaluation - Mailing list pgsql-general

From wstrzalka
Subject Re: plpgsql and logical expression evaluation
Date
Msg-id a0b7e93b-851a-4823-8041-220ae002d196@8g2000hse.googlegroups.com
Whole thread Raw
In response to plpgsql and logical expression evaluation  (wstrzalka <wstrzalka@gmail.com>)
Responses Re: plpgsql and logical expression evaluation  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
On 23 Kwi, 16:32, t...@sss.pgh.pa.us (Tom Lane) wrote:
> Alvaro Herrera <alvhe...@commandprompt.com> writes:
> > I think this business of non-shortcircuiting boolean operators is just
> > an artifact of the fact that PL/pgSQL hands off expression to the SQL
> > engine for evaluation.
>
> The complainant is not actually complaining about non-shortcircuiting
> boolean operators --- he thinks he is, but he's 100% mistaken.  The
> reason he's got a problem in the given example is that plpgsql has to
> provide parameter values for every parameter in the whole expression
> before it ships it off to the main engine.  ExecEvalAnd actually *does*
> know about short-circuiting, but it doesn't help because control never
> gets that far.
>
> Even if we rejiggered things so that supplying parameter values could be
> done lazily, there's the little problem that we can't even parse the
> expression without knowing the types of the parameters.  The correct
> analogy for what the OP tried to do is writing in C
>
>         if (x == 0 || no_such_var == 0)
>
> and expecting the "undefined variable no_such_var" failure not to be
> reported if x is zero.  Since it's happening at compile time, that's
> not going to happen.
>
>                         regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-gene...@postgresql.org)
> To make changes to your subscription:http://www.postgresql.org/mailpref/pgsql-general

Yes. You are right. I didn't realized what my complain was about.
But the 'no_such_var' example is great and explains what I was trying
to do, and why it doesn't work.

So - does it mean that the whole IF-ELSE-ENDIF is not parsed at once -
but lazy-parsed when the control reaches it, while the IF condition is
parsed as a single expression and therefore I get error in this case?



Thanks a lot.

                         regards
                                 wojtek

pgsql-general by date:

Previous
From: cgastrell@gmail.com
Date:
Subject: Re: Trouble running PostgreSQL server / Server must be started under certain locale.
Next
From: "Gabor Siklos"
Date:
Subject: Best backup setup