On 2013-06-18 13:17:14 +0000, and...@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 -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs