git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5126826)
ExecAgg() failed to finish running out set-returning functions in the last
2009年6月17日 16:05:34 +0000 (16:05 +0000)
2009年6月17日 16:05:34 +0000 (16:05 +0000)
aggregated tuple of a run. Per report from Laurenz Albe. This is a new
bug in 8.4, but only because prior versions rejected SRFs in an Agg plan
node altogether.


diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index bd55a5246a3e0c3c7c11874b36d5464a55986341..a6b1f194ae46a919d07aa147b4d518ae45280b80 100644 (file)
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -61,7 +61,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.166 2009年04月02日 20:59:10 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.167 2009年06月17日 16:05:34 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -811,9 +811,6 @@ lookup_hash_entry(AggState *aggstate, TupleTableSlot *inputslot)
TupleTableSlot *
ExecAgg(AggState *node)
{
- if (node->agg_done)
- return NULL;
-
/*
* Check to see if we're still projecting out tuples from a previous agg
* tuple (because there is a function-returning-set in the projection
@@ -831,6 +828,15 @@ ExecAgg(AggState *node)
node->ss.ps.ps_TupFromTlist = false;
}
+ /*
+ * Exit if nothing left to do. (We must do the ps_TupFromTlist check
+ * first, because in some cases agg_done gets set before we emit the
+ * final aggregate tuple, and we have to finish running SRFs for it.)
+ */
+ if (node->agg_done)
+ return NULL;
+
+ /* Dispatch based on strategy */
if (((Agg *) node->ss.ps.plan)->aggstrategy == AGG_HASHED)
{
if (!node->table_filled)
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /