]> granicus.if.org Git - postgresql/commitdiff
array_map failed to insert correct result type in an empty array.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 17 Dec 2004 20:58:36 +0000 (20:58 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 17 Dec 2004 20:58:36 +0000 (20:58 +0000)
Per example from Florian Pflug.

src/backend/utils/adt/arrayfuncs.c

index b415b67c52d680f4ab5136ef36846a9faa0e184b..eedc3990fa4671dc151eed38f43d945e0e3f9093 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.100.2.1 2004/06/08 20:28:29 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.100.2.2 2004/12/17 20:58:36 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2063,7 +2063,13 @@ array_map(FunctionCallInfo fcinfo, Oid inpType, Oid retType)
 
        /* Check for empty array */
        if (nitems <= 0)
-               PG_RETURN_ARRAYTYPE_P(v);
+       {
+               /* Return empty array */
+               result = (ArrayType *) palloc0(sizeof(ArrayType));
+               result->size = sizeof(ArrayType);
+               result->elemtype = retType;
+               PG_RETURN_ARRAYTYPE_P(result);
+       }
 
        /*
         * We arrange to look up info about input and return element types
@@ -2247,14 +2253,9 @@ construct_md_array(Datum *elems,
        if (ndims == 0)
        {
                /* Allocate and initialize 0-D result array */
-               nbytes = ARR_OVERHEAD(ndims);
-               result = (ArrayType *) palloc(nbytes);
-
-               result->size = nbytes;
-               result->ndim = ndims;
-               result->flags = 0;
+               result = (ArrayType *) palloc0(sizeof(ArrayType));
+               result->size = sizeof(ArrayType);
                result->elemtype = elmtype;
-
                return result;
        }