diff options
author | Andrew Dunstan <andrew@dunslane.net> | 2010-10-28 20:48:12 -0400 |
---|---|---|
committer | Andrew Dunstan <andrew@dunslane.net> | 2010-10-28 20:48:12 -0400 |
commit | 6c3c7b533e4b73bef99996f92da26c7c4124edd3 (patch) | |
tree | da315b7a761e6f21a41551337d849eac0dc87c10 | |
parent | a3d40e9fb51f8aab9cde5d5018be5e46332275fd (diff) | |
download | postgresql-6c3c7b533e4b73bef99996f92da26c7c4124edd3.tar.gz postgresql-6c3c7b533e4b73bef99996f92da26c7c4124edd3.zip |
Allow generic record arguments to plperl functions
-rw-r--r-- | src/pl/plperl/plperl.c | 9 |
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 { |