Re: wierd AND condition evaluation for plpgsql - Mailing list pgsql-hackers
| From | Tom Lane |
|---|---|
| Subject | Re: wierd AND condition evaluation for plpgsql |
| Date | |
| Msg-id | 17638.1022626569@sss.pgh.pa.us Whole thread Raw |
| In response to | Re: wierd AND condition evaluation for plpgsql (Hannu Krosing <hannu@tm.ee>) |
| List | pgsql-hackers |
Hannu Krosing <hannu@tm.ee> writes:
> Are these intricacies of SQL standardised anywhere ?
SQL92 section 3.3.4.4, "rule evaluation order" appears to sanction PG's
behavior. In particular note the part that says syntax rules and access
rules are "effectively applied at the same time" (ie, this checking is
done before execution starts --- that legitimizes the error originally
complained of) and the parts that say that inessential portions of
expressions need not be evaluated and that implementations are not
required to perform evaluations strictly left-to-right.
3.3.4.4 Rule evaluation order
A conforming implementation is not required to perform the exact sequence of actions defined in the
GeneralRules, but shall achieve the same effect on SQL-data and schemas as that sequence. The term
effectivelyis used to emphasize actions whose effect might be achieved in other ways by an implementation.
The Syntax Rules and Access Rules for contained syntactic elements are effectively applied at the same
timeas the Syntax Rules and Access Rules for the containing syntactic elements. The General Rules for
containedsyntactic elements are effectively applied be- fore the General Rules for the containing syntactic
elements.Where the precedence of operators is determined by the Formats of this International Standard or
byparentheses, those operators are ef- fectively applied in the order specified by that precedence. Where
theprecedence is not determined by the Formats or by parentheses, effective evaluation of expressions is
generallyperformed from left to right. However, it is implementation-dependent whether ex- pressions are
actuallyevaluated left to right, particularly when operands or operators might cause conditions to be raised or
if the results of the expressions can be determined without completely evaluating all parts of the
expression.In general, if some syn- tactic element contains more than one other syntactic element, then
theGeneral Rules for contained elements that appear earlier in the production for the containing syntactic
elementare applied before the General Rules for contained elements that appear later.
For example, in the production:
<A> ::= <B> <C>
the Syntax Rules and Access Rules for <A>, <B>, and <C> are ef- fectively applied simultaneously. The
GeneralRules for <B> are applied before the General Rules for <C>, and the General Rules for <A> are
appliedafter the General Rules for both <B> and <C>.
If the result of an expression or search condition can be deter- mined without completely evaluating all
partsof the expression or search condition, then the parts of the expression or search condi- tion whose
evaluationis not necessary are called the inessential parts. If the Access Rules pertaining to inessential parts
arenot satisfied, then the syntax error or access rule violation exception condition is raised regardless
ofwhether or not the inessential parts are actually evaluated. If evaluation of the inessential parts
wouldcause an exception condition to be raised, then it is implementation-dependent whether or not that
exceptioncondition is raised.
regards, tom lane
pgsql-hackers by date: