Re: polymorphic arguments and return type for PL/pgSQL - Mailing list pgsql-patches

From Tom Lane
Subject Re: polymorphic arguments and return type for PL/pgSQL
Date
Msg-id 4334.1056981561@sss.pgh.pa.us
Whole thread Raw
In response to polymorphic arguments and return type for PL/pgSQL  (Joe Conway <mail@joeconway.com>)
Responses Re: polymorphic arguments and return type for PL/pgSQL
List pgsql-patches
Joe Conway <mail@joeconway.com> writes:
> The attached patch enables PL/pgSQL functions (but not triggers) to
> accept and return polymorphic types. It is careful to return false from
> func_up_to_date() if any of the polymorphic types change from
> call-to-call.

I don't think you can usefully do it that way.  Suppose the same
function is being invoked in two places in a query, with two different
actual argument types at the two spots.  Won't this setup result in
dropping and rebuilding the function cache twice per row?  You've really
got to arrange for there to be a separate function cache entry for each
set of argument types --- in other words, the actual arg types have to
be part of the cache key.  (It might be time to change the cache lookup
into a hashtable instead of a simple linear list search...)

> It also falls back to the pg_proc declared types if the
> caller didn't setup the FuncExpr node.

This will result in "plpgsql functions cannot return type anyarray"
which is at best misleading.  It'd be better to have a specific error
message, say "could not determine actual return type for polymorphic
function %s".

            regards, tom lane

pgsql-patches by date:

Previous
From: sumit
Date:
Subject: Re: Patch for adding DATACUBE operator
Next
From: Tom Lane
Date:
Subject: Re: Patch for adding DATACUBE operator