On Wed, Aug 01, 2007 at 05:19:33AM -0000, Patrick TJ McPhee wrote:
> In article <19363.1185892343@sss.pgh.pa.us>,
> Tom Lane <tgl@sss.pgh.pa.us> wrote:
> % ptjm@interlog.com (Patrick TJ McPhee) writes:
> % > One problem with this idea is the treatment of implicit casts between
> % > numeric types in TypeCategory(). For implicit casts to work, the type's
> % > OID has to be listed in that function (i.e., it has to be a built-in type).
> %
> % That's not the case. There probably are some things that won't work
> % nicely if TypeCategory() doesn't recognize the type as numeric category,
> % but to claim that implicit casts won't work at all is wrong.
>
> I didn't say they won't work at all, but I do say that they won't work
> completely. I had to play around with it before I remembered where things
> broke down. Suppose you have a type called unsigned, written in C, with an
> implicit cast from int4 to unsigned. Then
>
> SELECT 23::unsigned
> UNION
> SELECT 0;
>
> will work if unsigned has one of the numeric OIDs known to TypeCategory(),
> but not if it was defined normally using CREATE TYPE.
>
> You can characterise this as working, just not nicely, but it's still
> a problem for anyone trying to implement unsigned, or any other kind of
> numeric value, as a user-defined type.
Be that as it may, I suspect that if someone puts forward a working set
of uint2/4/8 it'd be considered for inclusion.
--
Decibel!, aka Jim Nasby decibel@decibel.org
EnterpriseDB http://enterprisedb.com 512.569.9461 (cell)