From: | "Heikki Linnakangas" <heikki(at)enterprisedb(dot)com> |
---|---|
To: | "Simon Riggs" <simon(at)2ndquadrant(dot)com> |
Cc: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Resolving polymorphic functions with related datatypes |
Date: | 2008-07-03 11:11:34 |
Message-ID: | 486CB3E6.8050204@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Simon Riggs wrote:
> I'm using the nvl() function from the orafce package. It is defined as a
> polymorphic function so its function signature is
> nvl(anyelement, anyelement)
>
> Now if I try to use the function in this very typical way
> nvl(numeric_col, 0)
>
> we get
>
> ERROR: function nvl(numeric, integer) does not exist
>
> The same error occurs if we have nvl(smallint, integer) etc
>
> This is a real shame 'cos polymorphic functions ought to be a great way
> of saving development time and catalog space, yet they seem to fall down
> a hole without implicit casting.
>
> What I'd like it to do is to recognise that the 0 should be cast
> implicitly to another datatype within the same family. I want and expect
> nvl(char_column, 0)
> to fail, but I expect the various numeric/integer types we have to play
> nicely together without tears.
So, it would be analogous to the 'unknown' type, but for numeric
literals instead of text literals. Seems reasonable. It still wouldn't
allow nvl(1::bigint, 2::int4), though, just as the unknown type doesn't
help with nvl('foo'::text, 'bar'::varchar).
> If we can do it for indexes, can we do it for polymorphic functions also
> when there is no matching function?
Umm, what do indexes have to do with this?
--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com
From | Date | Subject | |
---|---|---|---|
Next Message | Heikki Linnakangas | 2008-07-03 11:33:01 | Re: Attaching and using the Postgres shared memory segment |
Previous Message | Simon Riggs | 2008-07-03 10:51:38 | Re: Resolving polymorphic functions with related datatypes |