2013/6/18 Andres Freund <and...@2ndquadrant.com>: > 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?
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 -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs