Joe Conway <[EMAIL PROTECTED]> 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

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to