Re: BUG #13973: Constants resolved in then/else clauses - Mailing list pgsql-bugs

From David G. Johnston
Subject Re: BUG #13973: Constants resolved in then/else clauses
Date
Msg-id CAKFQuwbQbf1JCJnKnf0eoRp2sCrk2fKNFDdkXiK2_PHxQQy0Jw@mail.gmail.com
Whole thread Raw
In response to BUG #13973: Constants resolved in then/else clauses  (harry.townsend@eflowglobal.com)
Responses Re: BUG #13973: Constants resolved in then/else clauses  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
On Thu, Feb 18, 2016 at 6:57 AM, <harry.townsend@eflowglobal.com> wrote:

> The following bug has been logged on the website:
>
> Bug reference:      13973
> Logged by:          Harry Townsend
> Email address:      harry.townsend@eflowglobal.com
> PostgreSQL version: 9.1.20
> Operating system:   Windows Server 2008
> Description:
>
> I attempted to create a safety check in a query using a "case when"
> statement such that if the condition evaluated to false, it would return =
(1
> / 0) in order to nullify the entire transaction. With small conditions,
> this
> works fine. With larger ones, it seems that the constants in the "else"
> clause (didn't test for "then" clause) are evaluated before the condition=
,
> causing it to fail every time. If the "else" part requires a column value=
,
> it seems to force the condition to evaluate first though.
>

=E2=80=8BSo, there is a note in the documentation that exactly addresses wh=
at you
are trying to do....=E2=80=8B

http://www.postgresql.org/docs/current/static/functions-conditional.html

=E2=80=8B"""
=E2=80=8BAs described in Section 4.2.14, there are various situations in wh=
ich
subexpressions of an expression are evaluated at different times, so that
the principle that "CASE evaluates only necessary subexpressions" is not
ironclad.* For example a constant 1/0 subexpression will usually result in
a division-by-zero failure* at planning time, even if it's within a CASE
arm that would never be entered at run time.
""" (emphasis mine)

=E2=80=8BSo, not a bug.

David J.

pgsql-bugs by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: BUG #13966: Documentation. 'Select' description
Next
From: Alvaro Herrera
Date:
Subject: Re: BUG #13973: Constants resolved in then/else clauses