Re: BUG #13973: Constants resolved in then/else clauses
От | David G. Johnston |
---|---|
Тема | Re: BUG #13973: Constants resolved in then/else clauses |
Дата | |
Msg-id | CAKFQuwbQbf1JCJnKnf0eoRp2sCrk2fKNFDdkXiK2_PHxQQy0Jw@mail.gmail.com обсуждение исходный текст |
Ответ на | BUG #13973: Constants resolved in then/else clauses (harry.townsend@eflowglobal.com) |
Ответы |
Re: BUG #13973: Constants resolved in then/else clauses
|
Список | 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 по дате отправления: