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;
    }