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

From: "Kevin Grittner" <Kevin(dot)Grittner(at)wicourts(dot)gov>
To: "Sam Mason" <sam(at)samason(dot)me(dot)uk>,"Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #5028: CASE returns ELSE value always when type is "char"
Date: 2009-09-04 15:59:48
Message-ID: 4AA0F324020000250002AABE@gw.wicourts.gov
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> I certainly don't want to have "char" emulate the misbegotten
> decision to have explicit and implicit coercions behave differently.
> So it looks to me like the argument to make "char" work like char(1)
> doesn't actually help us much to decide if an error should be thrown
> here or not. On the whole, throwing an error seems better from a
> usability perspective.

I feel that the behavior of "char" in at least this case should match
char(1) (or just plain char):

test=# select case when true then 'xxx' else 'a'::"char" end from t;
case
------
x
(1 row)

test=# select case when true then 'xxx' else 'a'::char(1) end from t;
case
------
xxx
(1 row)

test=# select case when true then 'xxx' else 'a'::char end from t;
case
------
xxx
(1 row)

Much as the reason for the behavior of "char" may seem clear when
inside the code looking out, it is astonishing for someone writing
application code.

-Kevin

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Robert Haas 2009-09-04 16:37:01 Re: BUG #5028: CASE returns ELSE value always when type is "char"
Previous Message Alvaro Herrera 2009-09-04 15:50:55 Re: BUG #5036: Advisory locks have unexpected behavior