]> 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:26 +0000 (20:58 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 17 Dec 2004 20:58:26 +0000 (20:58 +0000)
Per example from Florian Pflug.

src/backend/utils/adt/arrayfuncs.c

index 0e2ed00be08fd6174f29df3e9c387b61b8ce978d..cee11cc0b6714b1fd4955ed51aa82fe44064323f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.113 2004/09/27 01:39:02 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.114 2004/12/17 20:58:26 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2241,7 +2241,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
@@ -2425,14 +2431,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;
        }