diff options
Diffstat (limited to 'src/backend/optimizer/plan')
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 29 | ||||
-rw-r--r-- | src/backend/optimizer/plan/initsplan.c | 5 | ||||
-rw-r--r-- | src/backend/optimizer/plan/planmain.c | 4 | ||||
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 19 |
4 files changed, 34 insertions, 23 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 81e7fec0427..78e22c7b9e3 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.106 2001/05/20 20:28:18 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.107 2001/06/05 05:26:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,8 @@ static NestLoop *create_nestloop_plan(NestPath *best_path, List *tlist, List *joinclauses, List *otherclauses, Plan *outer_plan, List *outer_tlist, Plan *inner_plan, List *inner_tlist); -static MergeJoin *create_mergejoin_plan(MergePath *best_path, List *tlist, +static MergeJoin *create_mergejoin_plan(Query *root, + MergePath *best_path, List *tlist, List *joinclauses, List *otherclauses, Plan *outer_plan, List *outer_tlist, Plan *inner_plan, List *inner_tlist); @@ -244,7 +245,8 @@ create_join_plan(Query *root, JoinPath *best_path) switch (best_path->path.pathtype) { case T_MergeJoin: - plan = (Join *) create_mergejoin_plan((MergePath *) best_path, + plan = (Join *) create_mergejoin_plan(root, + (MergePath *) best_path, join_tlist, joinclauses, otherclauses, @@ -673,7 +675,8 @@ create_nestloop_plan(NestPath *best_path, } static MergeJoin * -create_mergejoin_plan(MergePath *best_path, +create_mergejoin_plan(Query *root, + MergePath *best_path, List *tlist, List *joinclauses, List *otherclauses, @@ -720,13 +723,15 @@ create_mergejoin_plan(MergePath *best_path, */ if (best_path->outersortkeys) outer_plan = (Plan *) - make_sort_from_pathkeys(outer_tlist, + make_sort_from_pathkeys(root, + outer_tlist, outer_plan, best_path->outersortkeys); if (best_path->innersortkeys) inner_plan = (Plan *) - make_sort_from_pathkeys(inner_tlist, + make_sort_from_pathkeys(root, + inner_tlist, inner_plan, best_path->innersortkeys); @@ -1367,14 +1372,15 @@ make_mergejoin(List *tlist, * each key number from 1 to keycount), or the executor will get confused! */ Sort * -make_sort(List *tlist, Plan *lefttree, int keycount) +make_sort(Query *root, List *tlist, Plan *lefttree, int keycount) { Sort *node = makeNode(Sort); Plan *plan = &node->plan; Path sort_path; /* dummy for result of cost_sort */ copy_plan_costsize(plan, lefttree); /* only care about copying size */ - cost_sort(&sort_path, NIL, lefttree->plan_rows, lefttree->plan_width); + cost_sort(&sort_path, root, NIL, + lefttree->plan_rows, lefttree->plan_width); plan->startup_cost = sort_path.startup_cost + lefttree->total_cost; plan->total_cost = sort_path.total_cost + lefttree->total_cost; plan->state = (EState *) NULL; @@ -1399,7 +1405,8 @@ make_sort(List *tlist, Plan *lefttree, int keycount) * of resdom nodes in the sort plan's target list. */ Sort * -make_sort_from_pathkeys(List *tlist, Plan *lefttree, List *pathkeys) +make_sort_from_pathkeys(Query *root, List *tlist, + Plan *lefttree, List *pathkeys) { List *sort_tlist; List *i; @@ -1455,10 +1462,10 @@ make_sort_from_pathkeys(List *tlist, Plan *lefttree, List *pathkeys) Assert(numsortkeys > 0); - return make_sort(sort_tlist, lefttree, numsortkeys); + return make_sort(root, sort_tlist, lefttree, numsortkeys); } -Material * +Material * make_material(List *tlist, Plan *lefttree) { Material *node = makeNode(Material); diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 3b3c761bca6..cf2f798954b 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.62 2001/05/20 20:28:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.63 2001/06/05 05:26:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -357,8 +357,9 @@ distribute_qual_to_rels(Query *root, Node *clause, bool can_be_equijoin; restrictinfo->clause = (Expr *) clause; - restrictinfo->eval_cost = -1; /* not computed until needed */ restrictinfo->subclauseindices = NIL; + restrictinfo->eval_cost = -1; /* not computed until needed */ + restrictinfo->this_selec = -1; /* not computed until needed */ restrictinfo->mergejoinoperator = InvalidOid; restrictinfo->left_sortop = InvalidOid; restrictinfo->right_sortop = InvalidOid; diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index 2f52e694d13..b5a77ea6232 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.65 2001/05/20 20:28:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.66 2001/06/05 05:26:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -317,7 +317,7 @@ subplanner(Query *root, { Path sort_path; /* dummy for result of cost_sort */ - cost_sort(&sort_path, root->query_pathkeys, + cost_sort(&sort_path, root, root->query_pathkeys, final_rel->rows, final_rel->width); sort_path.startup_cost += cheapestpath->total_cost; sort_path.total_cost += cheapestpath->total_cost; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index fbed3d6d092..a2fa8832058 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.107 2001/05/20 20:28:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.108 2001/06/05 05:26:04 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -48,7 +48,8 @@ static Plan *inheritance_planner(Query *parse, List *inheritlist); static Plan *grouping_planner(Query *parse, double tuple_fraction); static List *make_subplanTargetList(Query *parse, List *tlist, AttrNumber **groupColIdx); -static Plan *make_groupplan(List *group_tlist, bool tuplePerGroup, +static Plan *make_groupplan(Query *parse, + List *group_tlist, bool tuplePerGroup, List *groupClause, AttrNumber *grpColIdx, bool is_presorted, Plan *subplan); static List *postprocess_setop_tlist(List *new_tlist, List *orig_tlist); @@ -1153,7 +1154,8 @@ grouping_planner(Query *parse, double tuple_fraction) current_pathkeys = group_pathkeys; } - result_plan = make_groupplan(group_tlist, + result_plan = make_groupplan(parse, + group_tlist, tuplePerGroup, parse->groupClause, groupColIdx, @@ -1186,7 +1188,7 @@ grouping_planner(Query *parse, double tuple_fraction) if (parse->sortClause) { if (!pathkeys_contained_in(sort_pathkeys, current_pathkeys)) - result_plan = make_sortplan(tlist, result_plan, + result_plan = make_sortplan(parse, tlist, result_plan, parse->sortClause); } @@ -1329,7 +1331,8 @@ make_subplanTargetList(Query *parse, * first add an explicit Sort node. */ static Plan * -make_groupplan(List *group_tlist, +make_groupplan(Query *parse, + List *group_tlist, bool tuplePerGroup, List *groupClause, AttrNumber *grpColIdx, @@ -1374,7 +1377,7 @@ make_groupplan(List *group_tlist, Assert(keyno > 0); - subplan = (Plan *) make_sort(sort_tlist, subplan, keyno); + subplan = (Plan *) make_sort(parse, sort_tlist, subplan, keyno); } return (Plan *) make_group(group_tlist, tuplePerGroup, numCols, @@ -1386,7 +1389,7 @@ make_groupplan(List *group_tlist, * Add a Sort node to implement an explicit ORDER BY clause. */ Plan * -make_sortplan(List *tlist, Plan *plannode, List *sortcls) +make_sortplan(Query *parse, List *tlist, Plan *plannode, List *sortcls) { List *sort_tlist; List *i; @@ -1419,7 +1422,7 @@ make_sortplan(List *tlist, Plan *plannode, List *sortcls) Assert(keyno > 0); - return (Plan *) make_sort(sort_tlist, plannode, keyno); + return (Plan *) make_sort(parse, sort_tlist, plannode, keyno); } /* |