Skip to content

Commit 0d7099d

Browse files
committed
Ensure that the phrels sets of PlaceHolderVars appearing in an AppendRelInfo's
translated_vars list get updated when pulling up an appendrel member. It's not clear that this really matters at present, since relatively little gets done with the outputs of an appendrel child relation; but it probably will come back to bite us sometime if we leave them with the wrong values.
1 parent 0436679 commit 0d7099d

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/backend/optimizer/prep/prepjointree.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*
1717
*
1818
* IDENTIFICATION
19-
* $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.59 2008/11/11 18:13:32 tgl Exp $
19+
* $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.60 2008/11/11 19:05:21 tgl Exp $
2020
*
2121
*-------------------------------------------------------------------------
2222
*/
@@ -709,10 +709,9 @@ pull_up_simple_subquery(PlannerInfo *root, Node *jtnode, RangeTblEntry *rte,
709709
* insert_targetlist_placeholders() will be adjusted, so having created
710710
* them with the subquery's varno is correct.
711711
*
712-
* Likewise, relids appearing in AppendRelInfo nodes have to be fixed (but
713-
* we took care of their translated_vars lists above). We already checked
714-
* that this won't require introducing multiple subrelids into the
715-
* single-slot AppendRelInfo structs.
712+
* Likewise, relids appearing in AppendRelInfo nodes have to be fixed.
713+
* We already checked that this won't require introducing multiple
714+
* subrelids into the single-slot AppendRelInfo structs.
716715
*/
717716
if (parse->hasSubLinks || root->glob->lastPHId != 0 ||
718717
root->append_rel_list)
@@ -1679,7 +1678,8 @@ substitute_multiple_relids(Node *node, int varno, Relids subrelids)
16791678
*
16801679
* When we pull up a subquery, any AppendRelInfo references to the subquery's
16811680
* RT index have to be replaced by the substituted relid (and there had better
1682-
* be only one).
1681+
* be only one). We also need to apply substitute_multiple_relids to their
1682+
* translated_vars lists, since those might contain PlaceHolderVars.
16831683
*
16841684
* We assume we may modify the AppendRelInfo nodes in-place.
16851685
*/
@@ -1708,6 +1708,10 @@ fix_append_rel_relids(List *append_rel_list, int varno, Relids subrelids)
17081708
subvarno = bms_singleton_member(subrelids);
17091709
appinfo->child_relid = subvarno;
17101710
}
1711+
1712+
/* Also finish fixups for its translated vars */
1713+
substitute_multiple_relids((Node *) appinfo->translated_vars,
1714+
varno, subrelids);
17111715
}
17121716
}
17131717

0 commit comments

Comments
 (0)