diff options
Diffstat (limited to 'src/pl/plperl/plperl.c')
-rw-r--r-- | src/pl/plperl/plperl.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index 36665cff271..b2f4bf74a46 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -33,7 +33,7 @@ * ENHANCEMENTS, OR MODIFICATIONS. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.60 2004/11/21 21:17:03 tgl Exp $ + * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.61 2004/11/21 22:13:37 tgl Exp $ * **********************************************************************/ @@ -963,9 +963,25 @@ plperl_func_handler(PG_FUNCTION_ARGS) if (prodesc->fn_retistuple && fcinfo->resultinfo) /* set of tuples */ { + /* + * This branch will be taken when the function call + * appears in a context that can return a set of tuples, + * even if it only actually returns a single tuple + * (e.g. select a from foo() where foo returns a singleton + * of some composite type with member a). In this case, the + * return value will be a hashref. If a rowset is returned + * it will be an arrayref whose members will be hashrefs. + * + * Care is taken in the code only to refer to the appropriate + * one of ret_hv and ret_av, only one of which is therefore + * valid for any given call. + * + * XXX This code is in dire need of cleanup. + */ + /* SRF support */ - HV *ret_hv; - AV *ret_av; + HV *ret_hv = NULL; + AV *ret_av = NULL; FuncCallContext *funcctx; int call_cntr; int max_calls; |