aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/planmain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/plan/planmain.c')
-rw-r--r--src/backend/optimizer/plan/planmain.c69
1 files changed, 3 insertions, 66 deletions
diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c
index a22c7e6ffc3..d26e3eb8b49 100644
--- a/src/backend/optimizer/plan/planmain.c
+++ b/src/backend/optimizer/plan/planmain.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.11 1997/12/18 12:54:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.12 1997/12/20 07:59:25 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -41,7 +41,7 @@
static Plan *subplanner(Query *root, List *flat_tlist, List *qual);
static Result *make_result(List *tlist, Node *resconstantqual, Plan *subplan);
-static Plan *
+extern Plan *
make_groupPlan(List **tlist, bool tuplePerGroup,
List *groupClause, Plan *subplan);
@@ -72,7 +72,6 @@ query_planner(Query *root,
List *flattened_tlist = NIL;
List *level_tlist = NIL;
Plan *subplan = (Plan *) NULL;
- Agg *aggplan = NULL;
/*
* A command without a target list or qualification is an error,
@@ -175,49 +174,6 @@ query_planner(Query *root,
set_tlist_references(subplan);
/*
- * If we have a GROUP BY clause, insert a group node (with the
- * appropriate sort node.)
- */
- if (root->groupClause != NULL)
- {
- bool tuplePerGroup;
-
- /*
- * decide whether how many tuples per group the Group node needs
- * to return. (Needs only one tuple per group if no aggregate is
- * present. Otherwise, need every tuple from the group to do the
- * aggregation.)
- */
- tuplePerGroup = (root->qry_aggs) ? TRUE : FALSE;
-
- subplan =
- make_groupPlan(&tlist, tuplePerGroup, root->groupClause, subplan);
-
- }
-
- /*
- * If aggregate is present, insert the agg node
- */
- if (root->qry_aggs)
- {
- aggplan = make_agg(tlist, root->qry_numAgg, root->qry_aggs, subplan);
-
- /*
- * set the varno/attno entries to the appropriate references to
- * the result tuple of the subplans. (We need to set those in the
- * array of aggreg's in the Agg node also. Even though they're
- * pointers, after a few dozen's of copying, they're not the same
- * as those in the target list.)
- */
- set_agg_tlist_references(aggplan);
- set_agg_agglist_references(aggplan);
-
- subplan = (Plan *) aggplan;
-
- tlist = aggplan->plan.targetlist;
- }
-
- /*
* Build a result node linking the plan if we have constant quals
*/
if (constant_qual)
@@ -237,25 +193,6 @@ query_planner(Query *root,
}
/*
- * fix up the flattened target list of the plan root node so that
- * expressions are evaluated. this forces expression evaluations that
- * may involve expensive function calls to be delayed to the very last
- * stage of query execution. this could be bad. but it is joey's
- * responsibility to optimally push these expressions down the plan
- * tree. -- Wei
- *
- * But now nothing to do if there are GroupBy and/or Aggregates: 1.
- * make_groupPlan fixes tlist; 2. flatten_tlist_vars does nothing with
- * aggregates fixing only other entries (i.e. - GroupBy-ed and so
- * fixed by make_groupPlan). - vadim 04/05/97
- */
- if (root->groupClause == NULL && aggplan == NULL)
- {
- subplan->targetlist = flatten_tlist_vars(tlist,
- subplan->targetlist);
- }
-
- /*
* Destructively modify the query plan's targetlist to add fjoin lists
* to flatten functions that return sets of base types
*/
@@ -380,7 +317,7 @@ make_result(List *tlist,
*
*****************************************************************************/
-static Plan *
+Plan *
make_groupPlan(List **tlist,
bool tuplePerGroup,
List *groupClause,