Re: Needed function IF(expr, expr, expr)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Rod Taylor <rbt(at)rbt(dot)ca>
Cc: Peter Eisentraut <peter_e(at)gmx(dot)net>, Marek Lewczuk <newsy(at)lewczuk(dot)com>, pgsql-general(at)postgresql(dot)org, PostgreSQL Development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Needed function IF(expr, expr, expr)
Date: 2003-09-08 00:38:05
Message-ID: 16032.1062981485@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

Rod Taylor <rbt(at)rbt(dot)ca> writes:
>> Any comments on the UNKNOWN issue? It's not too late to change that for
>> 7.4, if we have consensus that we should.

> I would actually prefer to get UNKNOWN so I can apply my own default
> type, but we're not even given the chance to resolve the unknown issue
> ourselves.

> CREATE OR REPLACE FUNCTION if(bool,anyelement,anyelement)
> RETURNS anyelement
> AS 'SELECT
> CASE WHEN $2 is of (unknown) THEN
> CASE WHEN $1 THEN $2::point ELSE $3::point END
> ELSE
> CASE WHEN $1 THEN $2 ELSE $3 END
> END' language SQL;

There's no chance of that working --- the parser has to be able to
determine the result type of a function invocation without reference
to the function body. (Otherwise CREATE OR REPLACE FUNCTION invalidates
every use of the function.)

I don't feel that the anyelement in -> anyelement out mechanism is the
last word in polymorphism, though. Care to propose additional features
of the same kind? If you can find a way to describe the behavior you
want in terms of the function signature, it'd be worth considering ...

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2003-09-08 00:57:04 Re: Unixware 713 probs
Previous Message Rod Taylor 2003-09-07 23:25:30 Re: Needed function IF(expr, expr, expr)

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2003-09-08 00:43:53 Re: mcxt.c
Previous Message Alvaro Herrera 2003-09-07 23:52:39 Re: table-level and row-level locks.