Re: Nested CASE-WHEN scoping

From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Nested CASE-WHEN scoping
Date: 2011-05-25 12:21:33
Message-ID: 4DDCF44D.2020604@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 25.05.2011 14:57, Heikki Linnakangas wrote:
> Here's a bit contrived example:
>
> CREATE FUNCTION evileq (timestamptz, int4) returns boolean AS $$
> SELECT case $2 WHEN length($1::text) THEN true ELSE false END;
> $$ language sql;
> CREATE OPERATOR = (procedure = evileq, leftarg = timestamptz, rightarg =
> int4);
>
> postgres=# SELECT now() = 29, CASE now() WHEN 29 THEN 'foo' ELSE 'bar' END;
> ?column? | case
> ----------+------
> t | bar
> (1 row)
>
> Direct call to the operator, "now () = 29" returns true, but when used
> in CASE-WHEN, which implicitly does the same comparison, the result is
> false. Admittedly that's pretty far-fetched, but nevertheless it's a bug.

I should add that this works fine if the function is not an SQL function
that gets inlined. But inlining is desirable, we don't want to give up
on that, and inhibiting it in that case would need some extra
bookkeeping anyway.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2011-05-25 12:27:19 Re: Proposal: Another attempt at vacuum improvements
Previous Message Heikki Linnakangas 2011-05-25 11:57:44 Nested CASE-WHEN scoping