Convert a perl array to a postgres array when returned by Set Returning Functions...
authorAndrew Dunstan <[email protected]>
Mon, 28 Sep 2009 17:30:41 +0000 (17:30 +0000)
committerAndrew Dunstan <[email protected]>
Mon, 28 Sep 2009 17:30:41 +0000 (17:30 +0000)
src/pl/plperl/plperl.c

index 50eee09ef13cc822a8d97f0d0e83c207dd5dcab1..3437c92b2534486b04c1dec6b54f7371ce9079ec 100644 (file)
@@ -1,7 +1,7 @@
 /**********************************************************************
  * plperl.c - perl as a procedural language for PostgreSQL
  *
- *   $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.136.2.2 2009/06/05 20:32:15 adunstan Exp $
+ *   $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.136.2.3 2009/09/28 17:30:41 adunstan Exp $
  *
  **********************************************************************/
 
@@ -1972,7 +1972,15 @@ plperl_return_next(SV *sv)
 
        if (SvOK(sv))
        {
-           char       *val = SvPV(sv, PL_na);
+           char       *val;
+
+           if (prodesc->fn_retisarray && SvROK(sv) &&
+               SvTYPE(SvRV(sv)) == SVt_PVAV)
+           {
+               sv = plperl_convert_to_pg_array(sv);
+           }
+
+           val = SvPV(sv, PL_na);
 
            ret = InputFunctionCall(&prodesc->result_in_func, val,
                                    prodesc->result_typioparam, -1);