aboutsummaryrefslogtreecommitdiff
path: root/src/pl/plperl/plperl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plperl/plperl.c')
-rw-r--r--src/pl/plperl/plperl.c22
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;