aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2010-10-28 20:48:12 -0400
committerAndrew Dunstan <andrew@dunslane.net>2010-10-28 20:48:12 -0400
commit6c3c7b533e4b73bef99996f92da26c7c4124edd3 (patch)
treeda315b7a761e6f21a41551337d849eac0dc87c10
parenta3d40e9fb51f8aab9cde5d5018be5e46332275fd (diff)
downloadpostgresql-6c3c7b533e4b73bef99996f92da26c7c4124edd3.tar.gz
postgresql-6c3c7b533e4b73bef99996f92da26c7c4124edd3.zip
Allow generic record arguments to plperl functions
-rw-r--r--src/pl/plperl/plperl.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 6754d5ac72f..44becda3f32 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -1371,7 +1371,8 @@ plperl_validator(PG_FUNCTION_ARGS)
&argtypes, &argnames, &argmodes);
for (i = 0; i < numargs; i++)
{
- if (get_typtype(argtypes[i]) == TYPTYPE_PSEUDO)
+ if (get_typtype(argtypes[i]) == TYPTYPE_PSEUDO &&
+ argtypes[i] != RECORDOID)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("PL/Perl functions cannot accept type %s",
@@ -2105,7 +2106,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
typeStruct = (Form_pg_type) GETSTRUCT(typeTup);
/* Disallow pseudotype argument */
- if (typeStruct->typtype == TYPTYPE_PSEUDO)
+ if (typeStruct->typtype == TYPTYPE_PSEUDO &&
+ procStruct->proargtypes.values[i] != RECORDOID)
{
free(prodesc->proname);
free(prodesc);
@@ -2115,7 +2117,8 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
format_type_be(procStruct->proargtypes.values[i]))));
}
- if (typeStruct->typtype == TYPTYPE_COMPOSITE)
+ if (typeStruct->typtype == TYPTYPE_COMPOSITE ||
+ procStruct->proargtypes.values[i] == RECORDOID)
prodesc->arg_is_rowtype[i] = true;
else
{