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

Joseph Shraibman <jks@selectacast.net>

From: Joseph Shraibman <jks@selectacast.net>
To: Sam Mason <sam@samason.me.uk>
Cc: pgsql-bugs@postgresql.org
Date: 2009-09-01T17:00:48Z
Lists: pgsql-bugs
Sam Mason wrote:
> On Tue, Sep 01, 2009 at 04:36:25PM +0000, Joseph Shraibman wrote:
>> Description:        CASE returns ELSE value always when type is "char"
> 
> I think it's just silently truncating the literal to a single character.
> 
>> [local]:playpen=> select c.relkind, CASE c.relkind WHEN 'r' THEN 'table'
>> WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's'
>> THEN 'special' WHEN 'c' THEN 'composite type' WHEN 't' THEN 'toast' ELSE
>> c.relkind
>> playpen->  END from (select 'r'::"char" AS relkind) c;
>>  relkind | relkind 
>> ---------+---------
>>  r       | t

Ah, OK it seems I didn't pay close enough attention.

> 
> Here, 'r' maps to the "char" literal 'table' which PG interprets as the
> value 't'--i.e. PG silently chops of the 'able'.

So the type of what is in the ELSE clause determines the type of the output?