Thread: Using rowtype parameter

Using rowtype parameter

From
"Peter Zeltins"
Date:
I'm trying to write a stored proc (in pl/Pgl) that can accept rowtypes as arguments:
 
CREATE or replace FUNCTION www_get_data(user_id "varchar", objectname "varchar", operation "varchar", primarykeyvalue anyelement, rowvalue anyelement)
  RETURNS SETOF varchar[] AS
...
 
 
Whenever I try to typecast a rowtype in function call like this:
 
select www_get_data ('test','USERS','QUERY',CAST(('%','%','','','') as mytable),CAST(('%','%','','','') as mytable))
I get error message:
 
ERROR:  could not determine actual argument type for polymorphic function "www_get_data"
 
What gives? I thought typecast should suffice? Are there any limitations on using composite data types for anyelement parms?
 
Peter

Re: Using rowtype parameter

From
Tom Lane
Date:
"Peter Zeltins" <peter@greatnowhere.com> writes:
> I'm trying to write a stored proc (in pl/Pgl) that can accept rowtypes =
> as arguments:

> CREATE or replace FUNCTION www_get_data(user_id "varchar", objectname =
> "varchar", operation "varchar", primarykeyvalue anyelement, rowvalue =
> anyelement)
>   RETURNS SETOF varchar[] AS

> select www_get_data ('test','USERS','QUERY',CAST(('%','%','','','') as =
> mytable),CAST(('%','%','','','') as mytable))

ANYELEMENT only matches scalar types.  I don't think we have any support
for accepting an arbitrary row type as a function argument.  There's
been some speculation about allowing RECORD to do that, but it's not
done.

            regards, tom lane

Re: Using rowtype parameter

From
"Peter Zeltins"
Date:
> ANYELEMENT only matches scalar types.  I don't think we have any support
> for accepting an arbitrary row type as a function argument.  There's
> been some speculation about allowing RECORD to do that, but it's not
> done.

OK, that clears it up. RECORD would actually do nicely. Right now I'll be
forced to pass varchar/text arrays which can potentially lead to type
conversion issues.

Peter