Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pl/plperl/plperl.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 8fd4cfb550b..8b5d4dc1915 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -1078,14 +1078,15 @@ _array_to_datum(AV *av, int *ndims, int *dims, int cur_depth,
int i = 0;
int len = av_len(av) + 1;
- if (len == 0)
- astate = accumArrayResult(astate, (Datum) 0, true, atypid, NULL);
-
for (i = 0; i < len; i++)
{
+ /* fetch the array element */
SV **svp = av_fetch(av, i, FALSE);
+
+ /* see if this element is an array, if so get that */
SV *sav = svp ? get_perl_array_ref(*svp) : NULL;
+ /* multi-dimensional array? */
if (sav)
{
AV *nav = (AV *) SvRV(sav);
@@ -1149,6 +1150,9 @@ plperl_array_to_datum(SV *src, Oid typid)
astate = _array_to_datum((AV *) SvRV(src), &ndims, dims, 1, astate, typid,
atypid);
+ if (!astate)
+ return PointerGetDatum(construct_empty_array(atypid));
+
for (i = 0; i < ndims; i++)
lbs[i] = 1;