Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 789e111

Browse files
committed
PGPRO-8546: Create targetlist in partition filter and partition router nodes right with the parent_rti indexes.
In accordance with the pointing of Tom Lane: https://www.postgresql.org/message-id/71315.1686243488%40sss.pgh.pa.us Tags: pg_pathman
1 parent ac5f05a commit 789e111

File tree

4 files changed

+6
-46
lines changed

4 files changed

+6
-46
lines changed

src/include/partition_filter.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,7 @@ TupleConversionMap * build_part_tuple_map_child(Relation child_rel);
181181

182182
void destroy_tuple_map(TupleConversionMap *tuple_map);
183183

184-
List * pfilter_build_tlist(Plan *subplan);
185-
186-
void pfilter_tlist_fix_resjunk(CustomScan *subplan);
184+
List * pfilter_build_tlist(Plan *subplan, Index varno);
187185

188186
/* Find suitable partition using 'value' */
189187
Oid * find_partitions_for_value(Datum value, Oid value_type,

src/partition_filter.c

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -812,12 +812,7 @@ make_partition_filter(Plan *subplan,
812812
cscan->scan.scanrelid = 0;
813813

814814
/* Build an appropriate target list */
815-
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan);
816-
817-
/* Prepare 'custom_scan_tlist' for EXPLAIN (VERBOSE) */
818-
cscan->custom_scan_tlist = copyObject(cscan->scan.plan.targetlist);
819-
ChangeVarNodes((Node *) cscan->custom_scan_tlist, INDEX_VAR, parent_rti, 0);
820-
pfilter_tlist_fix_resjunk(cscan);
815+
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan, parent_rti);
821816

822817
/* Pack partitioned table's Oid and conflict_action */
823818
cscan->custom_private = list_make4(makeInteger(parent_relid),
@@ -1076,7 +1071,7 @@ partition_filter_explain(CustomScanState *node, List *ancestors, ExplainState *e
10761071
* Build partition filter's target list pointing to subplan tuple's elements.
10771072
*/
10781073
List *
1079-
pfilter_build_tlist(Plan *subplan)
1074+
pfilter_build_tlist(Plan *subplan, Index varno)
10801075
{
10811076
List *result_tlist = NIL;
10821077
ListCell *lc;
@@ -1096,7 +1091,7 @@ pfilter_build_tlist(Plan *subplan)
10961091
}
10971092
else
10981093
{
1099-
Var *var = makeVar(INDEX_VAR, /* point to subplan's elements */
1094+
Var *var = makeVar(varno, /* point to subplan's elements */
11001095
tle->resno,
11011096
exprType((Node *) tle->expr),
11021097
exprTypmod((Node *) tle->expr),
@@ -1115,34 +1110,6 @@ pfilter_build_tlist(Plan *subplan)
11151110
return result_tlist;
11161111
}
11171112

1118-
/*
1119-
* resjunk Vars had its varattnos being set on nonexisting relation columns.
1120-
* For future processing service attributes should be indicated correctly.
1121-
*/
1122-
void
1123-
pfilter_tlist_fix_resjunk(CustomScan *css)
1124-
{
1125-
ListCell *lc;
1126-
1127-
foreach(lc, css->custom_scan_tlist)
1128-
{
1129-
TargetEntry *tle = (TargetEntry *) lfirst(lc);
1130-
1131-
if (!IsA(tle->expr, Const))
1132-
{
1133-
Var *var = (Var *) tle->expr;
1134-
1135-
if (tle->resjunk)
1136-
{
1137-
/* To make Var recognizable as service attribute. */
1138-
var->varattno = -1;
1139-
}
1140-
}
1141-
}
1142-
1143-
return;
1144-
}
1145-
11461113
/*
11471114
* ----------------------------------------------
11481115
* Additional init steps for ResultPartsStorage

src/partition_overseer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ make_partition_overseer(Plan *subplan)
4646
cscan->scan.scanrelid = 0;
4747

4848
/* Build an appropriate target list */
49-
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan);
49+
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan, INDEX_VAR);
5050
cscan->custom_scan_tlist = subplan->targetlist;
5151

5252
return &cscan->scan.plan;

src/partition_router.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,7 @@ make_partition_router(Plan *subplan, int epq_param, Index parent_rti)
134134
cscan->scan.scanrelid = 0;
135135

136136
/* Build an appropriate target list */
137-
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan);
138-
139-
/* Fix 'custom_scan_tlist' for EXPLAIN (VERBOSE) */
140-
cscan->custom_scan_tlist = copyObject(cscan->scan.plan.targetlist);
141-
ChangeVarNodes((Node *) cscan->custom_scan_tlist, INDEX_VAR, parent_rti, 0);
142-
pfilter_tlist_fix_resjunk(cscan);
137+
cscan->scan.plan.targetlist = pfilter_build_tlist(subplan, parent_rti);
143138

144139
return &cscan->scan.plan;
145140
}

0 commit comments

Comments
 (0)