Joe Conway <[EMAIL PROTECTED]> writes:
> Inside the the function body, you can access the actual function call
> time *argument* types to create local variables by using the %type
> construct, e.g.:
> v_myvar $1%type;
> However, there is currently is *no way* to create a variable based on
> the return type, severely limiting the utility of polymorphic plpgsql
> functions.
Good point. I agree this is worth addressing.
> So what does the attached patch do? It adds an additional variable to
> any function with a polymorphic return type (only), called $0, which
> represents the actual function call time return type.
Ugh. That seems like a really crude way to handle things. In the first
place, a variable adds overhead whether you need it or not; in the
second place, what's the value of the variable if I try to fetch it,
or the effects if I assign to it? $0 seems like a rather
randomly-chosen notation.
I'm wondering whether we couldn't invent some notation along the lines
of "%rettype" to handle this issue. (But the other %foo notations in
plpgsql modify some argument, and I'm not sure what %rettype should
modify.) Or perhaps "functionname%type", although that seems subtly
wrong for reasons I can't quite put my finger on at this late hour.
Anyway, I'd like a representation that doesn't involve a phony variable.
regards, tom lane
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend