0003-Don-t-pass-grouping-target-around-unnecessarily.patch
application/octet-stream
Filename: 0003-Don-t-pass-grouping-target-around-unnecessarily.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0003
Subject: Don't pass grouping target around unnecessarily.
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/planner.c | 15 | 26 |
| src/backend/optimizer/util/pathnode.c | 2 | 2 |
| src/include/optimizer/pathnode.h | 0 | 2 |
From 821ada11ee49a7b28277d4480b4b6abc2d5ecad3 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Thu, 15 Mar 2018 16:51:48 -0400
Subject: [PATCH 3/3] Don't pass grouping target around unnecessarily.
---
src/backend/optimizer/plan/planner.c | 41 +++++++++++++----------------------
src/backend/optimizer/util/pathnode.c | 4 ++--
src/include/optimizer/pathnode.h | 2 --
3 files changed, 17 insertions(+), 30 deletions(-)
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index a414f482d8..00e49d4353 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -163,10 +163,10 @@ static RelOptInfo *create_grouping_paths(PlannerInfo *root,
static bool is_degenerate_grouping(PlannerInfo *root);
static void create_degenerate_grouping_paths(PlannerInfo *root,
RelOptInfo *input_rel,
- PathTarget *target, RelOptInfo *grouped_rel);
+ RelOptInfo *grouped_rel);
static void create_ordinary_grouping_paths(PlannerInfo *root,
RelOptInfo *input_rel,
- PathTarget *target, RelOptInfo *grouped_rel,
+ RelOptInfo *grouped_rel,
const AggClauseCosts *agg_costs,
grouping_sets_data *gd, int flags);
static void consider_groupingsets_paths(PlannerInfo *root,
@@ -174,7 +174,6 @@ static void consider_groupingsets_paths(PlannerInfo *root,
Path *path,
bool is_sorted,
bool can_hash,
- PathTarget *target,
grouping_sets_data *gd,
const AggClauseCosts *agg_costs,
double dNumGroups);
@@ -220,7 +219,6 @@ static void adjust_paths_for_srfs(PlannerInfo *root, RelOptInfo *rel,
List *targets, List *targets_contain_srfs);
static void add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
RelOptInfo *grouped_rel,
- PathTarget *target,
RelOptInfo *partially_grouped_rel,
const AggClauseCosts *agg_costs,
const AggClauseCosts *agg_final_costs,
@@ -3736,7 +3734,7 @@ create_grouping_paths(PlannerInfo *root,
* grouping, as appropriate.
*/
if (is_degenerate_grouping(root))
- create_degenerate_grouping_paths(root, input_rel, target, grouped_rel);
+ create_degenerate_grouping_paths(root, input_rel, grouped_rel);
else
{
int flags = 0;
@@ -3787,7 +3785,7 @@ create_grouping_paths(PlannerInfo *root,
if (can_partial_agg(root, agg_costs))
flags |= GROUPING_CAN_PARTIAL_AGG;
- create_ordinary_grouping_paths(root, input_rel, target, grouped_rel,
+ create_ordinary_grouping_paths(root, input_rel, grouped_rel,
agg_costs, gd, flags);
}
@@ -3825,7 +3823,7 @@ is_degenerate_grouping(PlannerInfo *root)
*/
static void
create_degenerate_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
- PathTarget *target, RelOptInfo *grouped_rel)
+ RelOptInfo *grouped_rel)
{
Query *parse = root->parse;
int nrows;
@@ -3847,7 +3845,7 @@ create_degenerate_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
{
path = (Path *)
create_result_path(root, grouped_rel,
- target,
+ grouped_rel->reltarget,
(List *) parse->havingQual);
paths = lappend(paths, path);
}
@@ -3860,14 +3858,13 @@ create_degenerate_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
false,
NIL,
-1);
- path->pathtarget = target;
}
else
{
/* No grouping sets, or just one, so one output row */
path = (Path *)
create_result_path(root, grouped_rel,
- target,
+ grouped_rel->reltarget,
(List *) parse->havingQual);
}
@@ -3886,7 +3883,7 @@ create_degenerate_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
*/
static void
create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
- PathTarget *target, RelOptInfo *grouped_rel,
+ RelOptInfo *grouped_rel,
const AggClauseCosts *agg_costs,
grouping_sets_data *gd, int flags)
{
@@ -3925,7 +3922,7 @@ create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
/* Build final grouping paths */
- add_paths_to_grouping_rel(root, input_rel, grouped_rel, target,
+ add_paths_to_grouping_rel(root, input_rel, grouped_rel,
partially_grouped_rel, agg_costs,
&agg_final_costs, gd, can_sort, can_hash,
dNumGroups, (List *) parse->havingQual);
@@ -3964,7 +3961,6 @@ consider_groupingsets_paths(PlannerInfo *root,
Path *path,
bool is_sorted,
bool can_hash,
- PathTarget *target,
grouping_sets_data *gd,
const AggClauseCosts *agg_costs,
double dNumGroups)
@@ -4106,7 +4102,6 @@ consider_groupingsets_paths(PlannerInfo *root,
create_groupingsets_path(root,
grouped_rel,
path,
- target,
(List *) parse->havingQual,
strat,
new_rollups,
@@ -4264,7 +4259,6 @@ consider_groupingsets_paths(PlannerInfo *root,
create_groupingsets_path(root,
grouped_rel,
path,
- target,
(List *) parse->havingQual,
AGG_MIXED,
rollups,
@@ -4281,7 +4275,6 @@ consider_groupingsets_paths(PlannerInfo *root,
create_groupingsets_path(root,
grouped_rel,
path,
- target,
(List *) parse->havingQual,
AGG_SORTED,
gd->rollups,
@@ -6083,7 +6076,6 @@ get_partitioned_child_rels_for_join(PlannerInfo *root, Relids join_relids)
static void
add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
RelOptInfo *grouped_rel,
- PathTarget *target,
RelOptInfo *partially_grouped_rel,
const AggClauseCosts *agg_costs,
const AggClauseCosts *agg_final_costs,
@@ -6121,7 +6113,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
if (parse->groupingSets)
{
consider_groupingsets_paths(root, grouped_rel,
- path, true, can_hash, target,
+ path, true, can_hash,
gd, agg_costs, dNumGroups);
}
else if (parse->hasAggs)
@@ -6134,7 +6126,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
create_agg_path(root,
grouped_rel,
path,
- target,
+ grouped_rel->reltarget,
parse->groupClause ? AGG_SORTED : AGG_PLAIN,
AGGSPLIT_SIMPLE,
parse->groupClause,
@@ -6152,7 +6144,6 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
create_group_path(root,
grouped_rel,
path,
- target,
parse->groupClause,
havingQual,
dNumGroups));
@@ -6195,7 +6186,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
create_agg_path(root,
grouped_rel,
path,
- target,
+ grouped_rel->reltarget,
parse->groupClause ? AGG_SORTED : AGG_PLAIN,
AGGSPLIT_FINAL_DESERIAL,
parse->groupClause,
@@ -6207,7 +6198,6 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
create_group_path(root,
grouped_rel,
path,
- target,
parse->groupClause,
havingQual,
dNumGroups));
@@ -6225,7 +6215,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
* Try for a hash-only groupingsets path over unsorted input.
*/
consider_groupingsets_paths(root, grouped_rel,
- cheapest_path, false, true, target,
+ cheapest_path, false, true,
gd, agg_costs, dNumGroups);
}
else
@@ -6250,7 +6240,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
add_path(grouped_rel, (Path *)
create_agg_path(root, grouped_rel,
cheapest_path,
- target,
+ grouped_rel->reltarget,
AGG_HASHED,
AGGSPLIT_SIMPLE,
parse->groupClause,
@@ -6278,7 +6268,7 @@ add_paths_to_grouping_rel(PlannerInfo *root, RelOptInfo *input_rel,
create_agg_path(root,
grouped_rel,
path,
- target,
+ grouped_rel->reltarget,
AGG_HASHED,
AGGSPLIT_FINAL_DESERIAL,
parse->groupClause,
@@ -6416,7 +6406,6 @@ create_partial_grouping_paths(PlannerInfo *root,
create_group_path(root,
partially_grouped_rel,
path,
- partially_grouped_rel->reltarget,
parse->groupClause,
NIL,
dNumPartialGroups));
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c
index fe3b4582d4..22133fcf12 100644
--- a/src/backend/optimizer/util/pathnode.c
+++ b/src/backend/optimizer/util/pathnode.c
@@ -2651,12 +2651,12 @@ GroupPath *
create_group_path(PlannerInfo *root,
RelOptInfo *rel,
Path *subpath,
- PathTarget *target,
List *groupClause,
List *qual,
double numGroups)
{
GroupPath *pathnode = makeNode(GroupPath);
+ PathTarget *target = rel->reltarget;
pathnode->path.pathtype = T_Group;
pathnode->path.parent = rel;
@@ -2828,7 +2828,6 @@ GroupingSetsPath *
create_groupingsets_path(PlannerInfo *root,
RelOptInfo *rel,
Path *subpath,
- PathTarget *target,
List *having_qual,
AggStrategy aggstrategy,
List *rollups,
@@ -2836,6 +2835,7 @@ create_groupingsets_path(PlannerInfo *root,
double numGroups)
{
GroupingSetsPath *pathnode = makeNode(GroupingSetsPath);
+ PathTarget *target = rel->reltarget;
ListCell *lc;
bool is_first = true;
bool is_first_sort = true;
diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h
index ef7173fbf8..381bc30813 100644
--- a/src/include/optimizer/pathnode.h
+++ b/src/include/optimizer/pathnode.h
@@ -178,7 +178,6 @@ extern SortPath *create_sort_path(PlannerInfo *root,
extern GroupPath *create_group_path(PlannerInfo *root,
RelOptInfo *rel,
Path *subpath,
- PathTarget *target,
List *groupClause,
List *qual,
double numGroups);
@@ -200,7 +199,6 @@ extern AggPath *create_agg_path(PlannerInfo *root,
extern GroupingSetsPath *create_groupingsets_path(PlannerInfo *root,
RelOptInfo *rel,
Path *subpath,
- PathTarget *target,
List *having_qual,
AggStrategy aggstrategy,
List *rollups,
--
2.14.3 (Apple Git-98)