aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/array_userfuncs.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-06-20 18:45:28 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-06-20 18:45:28 +0000
commit82480e28f5744582dba78320824e3569ed76e74a (patch)
treef3d6aea7799b512660fa16e3a41d4187125d20f7 /src/backend/utils/adt/array_userfuncs.c
parent87698ffa8e667f99a224420db97aa0306d71b3f4 (diff)
downloadpostgresql-82480e28f5744582dba78320824e3569ed76e74a.tar.gz
postgresql-82480e28f5744582dba78320824e3569ed76e74a.zip
Fix things so that array_agg_finalfn does not modify or free its input
ArrayBuildState, per trouble report from Merlin Moncure. By adopting this fix, we are essentially deciding that aggregate final-functions should not modify their inputs ever. Adjust documentation and comments to match that conclusion.
Diffstat (limited to 'src/backend/utils/adt/array_userfuncs.c')
-rw-r--r--src/backend/utils/adt/array_userfuncs.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c
index c30d6b42b07..a1f48d8784c 100644
--- a/src/backend/utils/adt/array_userfuncs.c
+++ b/src/backend/utils/adt/array_userfuncs.c
@@ -6,7 +6,7 @@
* Copyright (c) 2003-2009, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.30 2009/06/11 14:49:03 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.31 2009/06/20 18:45:28 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -537,10 +537,13 @@ array_agg_finalfn(PG_FUNCTION_ARGS)
dims[0] = state->nelems;
lbs[0] = 1;
- /* Release working state if regular aggregate, but not if window agg */
+ /*
+ * Make the result. We cannot release the ArrayBuildState because
+ * sometimes aggregate final functions are re-executed.
+ */
result = makeMdArrayResult(state, 1, dims, lbs,
CurrentMemoryContext,
- IsA(fcinfo->context, AggState));
+ false);
PG_RETURN_DATUM(result);
}