Skip to content

Commit 7e7cb1b

Browse files
committed
remove innerrel_rinfo_contains_part_attr in pathman_join_pathlist_hook(), reorder clause_contains_params() check in pathman_rel_pathlist_hook(), use get_baserel_parampathinfo() instead of get_appendrel_parampathinfo()
1 parent 06a2bae commit 7e7cb1b

File tree

2 files changed

+15
-24
lines changed

2 files changed

+15
-24
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ regression.out
77
*.so
88
*.pyc
99
pg_pathman--*.sql
10+
*.gcda
11+
*.gcno

src/hooks.c

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ pathman_join_pathlist_hook(PlannerInfo *root,
5151
ListCell *lc;
5252
WalkerContext context;
5353
double paramsel;
54-
bool innerrel_rinfo_contains_part_attr;
5554

5655
/* Call hooks set by other extensions */
5756
if (set_join_pathlist_next)
@@ -103,11 +102,6 @@ pathman_join_pathlist_hook(PlannerInfo *root,
103102
paramsel *= wrap->paramsel;
104103
}
105104

106-
/* Check that innerrel's RestrictInfos contain partitioned column */
107-
innerrel_rinfo_contains_part_attr =
108-
get_partitioned_attr_clauses(innerrel->baserestrictinfo,
109-
inner_prel, innerrel->relid) != NULL;
110-
111105
foreach (lc, innerrel->pathlist)
112106
{
113107
AppendPath *cur_inner_path = (AppendPath *) lfirst(lc);
@@ -132,14 +126,10 @@ pathman_join_pathlist_hook(PlannerInfo *root,
132126
/* Get the ParamPathInfo for a parameterized path */
133127
ppi = get_baserel_parampathinfo(root, innerrel, inner_required);
134128

135-
/*
136-
* Skip if neither rel->baserestrictinfo nor
137-
* ppi->ppi_clauses reference partition attribute
138-
*/
139-
if (!(innerrel_rinfo_contains_part_attr ||
140-
(ppi && get_partitioned_attr_clauses(ppi->ppi_clauses,
141-
inner_prel,
142-
innerrel->relid))))
129+
/* Skip ppi->ppi_clauses don't reference partition attribute */
130+
if (!(ppi && get_partitioned_attr_clauses(ppi->ppi_clauses,
131+
inner_prel,
132+
innerrel->relid)))
143133
continue;
144134

145135
inner = create_runtimeappend_path(root, cur_inner_path, ppi, paramsel);
@@ -213,13 +203,13 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
213203
ListCell *lc;
214204
Oid *children;
215205
List *ranges,
216-
*wrappers;
206+
*wrappers,
207+
*rel_partattr_clauses = NIL;
217208
PathKey *pathkeyAsc = NULL,
218209
*pathkeyDesc = NULL;
219210
double paramsel = 1.0;
220211
WalkerContext context;
221212
int i;
222-
bool rel_rinfo_contains_part_attr = false;
223213

224214
if (prel->parttype == PT_RANGE)
225215
{
@@ -336,20 +326,19 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
336326
pg_pathman_enable_runtime_merge_append))
337327
return;
338328

329+
/* Check that rel's RestrictInfo contains partitioned column */
330+
rel_partattr_clauses = get_partitioned_attr_clauses(rel->baserestrictinfo,
331+
prel, rel->relid);
332+
339333
/* Runtime[Merge]Append is pointless if there are no params in clauses */
340-
if (!clause_contains_params((Node *) get_actual_clauses(rel->baserestrictinfo)))
334+
if (!clause_contains_params((Node *) rel_partattr_clauses))
341335
return;
342336

343-
/* Check that rel's RestrictInfo contains partitioned column */
344-
rel_rinfo_contains_part_attr =
345-
get_partitioned_attr_clauses(rel->baserestrictinfo,
346-
prel, rel->relid) != NULL;
347-
348337
foreach (lc, rel->pathlist)
349338
{
350339
AppendPath *cur_path = (AppendPath *) lfirst(lc);
351340
Relids inner_required = PATH_REQ_OUTER((Path *) cur_path);
352-
ParamPathInfo *ppi = get_appendrel_parampathinfo(rel, inner_required);
341+
ParamPathInfo *ppi = get_baserel_parampathinfo(root, rel, inner_required);
353342
Path *inner_path = NULL;
354343

355344
/* Skip if rel contains some join-related stuff or path type mismatched */
@@ -363,7 +352,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
363352
* Skip if neither rel->baserestrictinfo nor
364353
* ppi->ppi_clauses reference partition attribute
365354
*/
366-
if (!(rel_rinfo_contains_part_attr ||
355+
if (!(rel_partattr_clauses ||
367356
(ppi && get_partitioned_attr_clauses(ppi->ppi_clauses,
368357
prel, rel->relid))))
369358
continue;

0 commit comments

Comments
 (0)