Re: BUG #8237: CASE Expression - Order of expression processing

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: BUG #8237: CASE Expression - Order of expression processing
Дата
Msg-id 20130618133132.GG5646@awork2.anarazel.de
обсуждение исходный текст
Ответ на BUG #8237: CASE Expression - Order of expression processing  (andrea@lombardoni.ch)
Ответы Re: BUG #8237: CASE Expression - Order of expression processing  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: BUG #8237: CASE Expression - Order of expression processing  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
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?

Greetings,

Andres Freund

--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

В списке pgsql-bugs по дате отправления:

Предыдущее
От: andrea@lombardoni.ch
Дата:
Сообщение: BUG #8237: CASE Expression - Order of expression processing
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: BUG #8237: CASE Expression - Order of expression processing