Lists: | pgsql-bugs |
---|
From: | Kris Jurka <books(at)ejurka(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | domain on bit(N) type produces strange results |
Date: | 2004-11-06 05:34:39 |
Message-ID: | Pine.BSO.4.56.0411060026120.10337@leary.csoft.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
Creating a domain on bit(N) doesn't seem to work as expected when casting
to the domain type.
CREATE DOMAIN bit4 AS bit(4);
SELECT 7::bit(4), 7::bit4;
bit | bit4
------+------
0111 | 1000
(1 row)
Reported in #postgresql by msw_alt.
Kris Jurka
From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Kris Jurka <books(at)ejurka(dot)com> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: domain on bit(N) type produces strange results |
Date: | 2004-11-06 06:40:05 |
Message-ID: | 26787.1099723205@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
Kris Jurka <books(at)ejurka(dot)com> writes:
> Creating a domain on bit(N) doesn't seem to work as expected when casting
> to the domain type.
> CREATE DOMAIN bit4 AS bit(4);
> SELECT 7::bit(4), 7::bit4;
> bit | bit4
> ------+------
> 0111 | 1000
> (1 row)
What's going on here is that "7::bit4" is implemented as
"7::bit::bit(4)", and since 7::bit is taken to mean 7::bit(1),
the result follows.
Bit is the only typmod-using datatype for which casting to the type
with typmod -1 risks discarding information. In a brief look I'm
not sure whether this can easily be fixed without introducing unwanted
side-effects.
regards, tom lane
From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Kris Jurka <books(at)ejurka(dot)com> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: domain on bit(N) type produces strange results |
Date: | 2004-11-06 17:49:18 |
Message-ID: | 9524.1099763358@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
I wrote:
> Kris Jurka <books(at)ejurka(dot)com> writes:
>> Creating a domain on bit(N) doesn't seem to work as expected when casting
>> to the domain type.
> What's going on here is that "7::bit4" is implemented as
> "7::bit::bit(4)", and since 7::bit is taken to mean 7::bit(1),
> the result follows.
I've fixed it to collapse this into a direct "7::bit(4)" coercion.
Thanks for the test case.
regards, tom lane