simple case syntax oddity in 8.0.0

Started by Vladabout 21 years ago2 messagesgeneral
Jump to latest
#1Vlad
marchenko@gmail.com

Hi there:

Postgresql 8.0.0, FreeBSD 5.3

test=> select case 0 when 0 then null else 1/0 end as test;
ERROR: division by zero

test=> select case when 0=0 then null else 1/0 end as test;
test
------

(1 row)

test=>

Postgresql 7.4.5, FreeBSD 5.3

test => select case 0 when 0 then null else 1/0 end as test;
test
------

(1 row)

test => select case when 0=0 then null else 1/0 end as test;
test
------

--
Vlad

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Vlad (#1)
Re: simple case syntax oddity in 8.0.0

Vlad <marchenko@gmail.com> writes:

Postgresql 8.0.0, FreeBSD 5.3

test=> select case 0 when 0 then null else 1/0 end as test;
ERROR: division by zero

Hmm ... unexpected side effect of the change to avoid evaluating the
test-expression multiple times. This used to be transformed into
this at parse time:

select case when 0=0 then null else 1/0 end as test;

and then constant-folding would do the right thing.
But now it's transformed into something sort of like

select (let x = 0 in case when x=0 then ...)

and the when-clause therefore appears not to be constant. I think
I can fix this for 8.0.2, though.

regards, tom lane