aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/arrayfuncs.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-12-17 20:58:36 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-12-17 20:58:36 +0000
commit9ab182c2f1137e2f3394d023b18b01b882d968a9 (patch)
tree3a171279d611ff86ed94bd5e943b591a0e1c1903 /src/backend/utils/adt/arrayfuncs.c
parent1d3ee97a3c54713829cdd7e4c404aedb6b6e5b42 (diff)
downloadpostgresql-9ab182c2f1137e2f3394d023b18b01b882d968a9.tar.gz
postgresql-9ab182c2f1137e2f3394d023b18b01b882d968a9.zip
array_map failed to insert correct result type in an empty array.
Per example from Florian Pflug.
Diffstat (limited to 'src/backend/utils/adt/arrayfuncs.c')
-rw-r--r--src/backend/utils/adt/arrayfuncs.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index b415b67c52d..eedc3990fa4 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -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;
}