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

From: Andres Freund <andres(at)2ndquadrant(dot)com>
To: andrea(at)lombardoni(dot)ch
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #8237: CASE Expression - Order of expression processing
Date: 2013-06-18 13:31:32
Message-ID: 20130618133132.GG5646@awork2.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 2013-06-18 13:17:14 +0000, andrea(at)lombardoni(dot)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

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Pavel Stehule 2013-06-18 13:49:06 Re: BUG #8237: CASE Expression - Order of expression processing
Previous Message andrea 2013-06-18 13:17:14 BUG #8237: CASE Expression - Order of expression processing