Re: BUG #5028: CASE returns ELSE value always when type is"char"

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Sam Mason <sam(at)samason(dot)me(dot)uk>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #5028: CASE returns ELSE value always when type is"char"
Date: 2009-09-02 17:19:07
Message-ID: 10764.1251911947@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Sam Mason <sam(at)samason(dot)me(dot)uk> writes:
> ... For example:

> CREATE FUNCTION add(int,int) RETURNS int LANGUAGE sql
> AS $$ SELECT $1 + $2; $$;

> CREATE FUNCTION add(int,int,int DEFAULT NULL) RETURNS text LANGUAGE sql
> AS $$ SELECT ($1 + $2)::text; $$;

> What type should it attribute to the result of:

> SELECT add(1,2);

> In fact it doesn't seem to want to play ball at all. Even given the
> apparently unambiguous:

> SELECT 1+add(1,2);
> or
> SELECT 'hi'||add(1,2);

> It doesn't get anywhere.

Well, no, because our type resolution is bottom-up; it does not consider
context when trying to resolve the overloaded "add()" function
reference. "Unknown" is the only part of the system that allows for any
delay at all in identifying the type of a construct, and even that is
limited to a literal and its first-level surrounding context.

It's interesting that you want to go in 100% the opposite direction from
Kevin, who seems to want to eliminate type inference altogether. Maybe
our current compromise isn't too bad, if it makes everybody unhappy in
opposite directions ;-)

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Armando Taffarel Neto 2009-09-02 17:25:44 BUG #5030: Problem on "RETURN QUERY EXECUTE" when a column is dropped from a table
Previous Message Tom Lane 2009-09-02 16:58:00 Re: BUG #5025: Aggregate function with subquery in 8.3 and 8.4.