Re: BUG #8237: CASE Expression - Order of expression processing
От | Pavel Stehule |
---|---|
Тема | Re: BUG #8237: CASE Expression - Order of expression processing |
Дата | |
Msg-id | CAFj8pRARD0kkZVpDWZqExRbQTXdL5WtWRvQwMHBMLqDNy05yiA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #8237: CASE Expression - Order of expression processing (Andres Freund <andres@2ndquadrant.com>) |
Список | pgsql-bugs |
2013/6/18 Andres Freund <andres@2ndquadrant.com>: > On 2013-06-18 13:17:14 +0000, andrea@lombardoni.ch wrote: >> template1=# SELECT CASE WHEN 1=0 THEN 0 ELSE 1/0 END; >> ERROR: division by zero >> >> >> In this case the CASE behaves as expected. >> >> >> But in the following expression: >> >> >> template1=# SELECT CASE WHEN (SELECT 0)=0 THEN 0 ELSE 1/0 END; >> ERROR: division by zero > > Hrmpf. This is rather annoying. Const simplification processes all > clauses and evaluates them if it can. Which is - as demonstrated above - > broken. The only reason > #= SELECT CASE WHEN 1=1 THEN 0 ELSE 1/0 END; > works is that we abort even looking at further WHEN clauses if we know > that one WHEN succeeds. > So it seems we need to stop processing after finding a single WHEN > that's not const? Does anybody have a better idea? probably we should to evaluate constants under subtransaction, and after exception, we should to stop precalculation of related subexpression. But it is slow :( > > Greetings, > > Andres Freund > > -- > Andres Freund http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Training & Services > > > -- > Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-bugs
В списке pgsql-bugs по дате отправления: