Skip to content

Commit a789fa2

Browse files
committed
Merge branch 'master' into rework_query_walkers
2 parents ae81df2 + e710bbf commit a789fa2

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/hooks.c

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,19 +99,21 @@ pathman_join_pathlist_hook(PlannerInfo *root,
9999
paramsel *= wrap->paramsel;
100100
}
101101

102-
/* Check that innerrel's RestrictInfo contains partitioned column */
102+
/* Check that innerrel's RestrictInfos contain partitioned column */
103103
innerrel_rinfo_contains_part_attr =
104104
get_partitioned_attr_clauses(innerrel->baserestrictinfo,
105105
inner_prel, innerrel->relid) != NULL;
106106

107107
foreach (lc, innerrel->pathlist)
108108
{
109+
AppendPath *cur_inner_path = (AppendPath *) lfirst(lc);
109110
Path *outer,
110111
*inner;
111112
NestPath *nest_path; /* NestLoop we're creating */
112113
ParamPathInfo *ppi; /* parameterization info */
113114
Relids inner_required; /* required paremeterization relids */
114-
AppendPath *cur_inner_path = (AppendPath *) lfirst(lc);
115+
List *filtered_joinclauses = NIL;
116+
ListCell *rinfo_lc;
115117

116118
if (!IsA(cur_inner_path, AppendPath))
117119
continue;
@@ -136,8 +138,7 @@ pathman_join_pathlist_hook(PlannerInfo *root,
136138
innerrel->relid))))
137139
continue;
138140

139-
inner = create_runtimeappend_path(root, cur_inner_path,
140-
ppi, paramsel);
141+
inner = create_runtimeappend_path(root, cur_inner_path, ppi, paramsel);
141142

142143
initial_cost_nestloop(root, &workspace, jointype,
143144
outer, inner, /* built paths */
@@ -151,7 +152,29 @@ pathman_join_pathlist_hook(PlannerInfo *root,
151152
pathkeys,
152153
calc_nestloop_required_outer(outer, inner));
153154

154-
/* Finally we can add new NestLoop path */
155+
/* Discard all clauses that are to be evaluated by 'inner' */
156+
foreach (rinfo_lc, extra->restrictlist)
157+
{
158+
RestrictInfo *rinfo = (RestrictInfo *) lfirst(rinfo_lc);
159+
160+
Assert(IsA(rinfo, RestrictInfo));
161+
if (!join_clause_is_movable_to(rinfo, inner->parent))
162+
filtered_joinclauses = lappend(filtered_joinclauses, rinfo);
163+
}
164+
165+
/*
166+
* Override 'rows' value produced by standard estimator.
167+
* Currently we use get_parameterized_joinrel_size() since
168+
* it works just fine, but this might change some day.
169+
*/
170+
nest_path->path.rows = get_parameterized_joinrel_size(root,
171+
joinrel,
172+
outer->rows,
173+
inner->rows,
174+
extra->sjinfo,
175+
filtered_joinclauses);
176+
177+
/* Finally we can add the new NestLoop path */
155178
add_path(joinrel, (Path *) nest_path);
156179
}
157180
}

src/pg_pathman.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,7 +1510,6 @@ handle_boolexpr(const BoolExpr *expr, WalkerContext *context)
15101510
switch (expr->boolop)
15111511
{
15121512
case OR_EXPR:
1513-
// finish_least_greatest(arg, context);
15141513
result->rangeset = irange_list_union(result->rangeset, arg->rangeset);
15151514
break;
15161515
case AND_EXPR:
@@ -1671,7 +1670,6 @@ set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)
16711670
path = create_seqscan_path(root, rel, required_outer);
16721671
#endif
16731672
add_path(rel, path);
1674-
// set_pathkeys(root, rel, path);
16751673

16761674
/* Consider index scans */
16771675
create_index_paths(root, rel);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy