diff options
Diffstat (limited to 'src/backend/optimizer/path/pathkeys.c')
-rw-r--r-- | src/backend/optimizer/path/pathkeys.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index eed39b9e1bd..4436ac111d1 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -557,6 +557,7 @@ build_expression_pathkey(PlannerInfo *root, * * 'rel': outer query's RelOptInfo for the subquery relation. * 'subquery_pathkeys': the subquery's output pathkeys, in its terms. + * 'subquery_tlist': the subquery's output targetlist, in its terms. * * It is not necessary for caller to do truncate_useless_pathkeys(), * because we select keys in a way that takes usefulness of the keys into @@ -564,12 +565,12 @@ build_expression_pathkey(PlannerInfo *root, */ List * convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, - List *subquery_pathkeys) + List *subquery_pathkeys, + List *subquery_tlist) { List *retval = NIL; int retvallen = 0; int outer_query_keys = list_length(root->query_pathkeys); - List *sub_tlist = rel->subplan->targetlist; ListCell *i; foreach(i, subquery_pathkeys) @@ -589,7 +590,7 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, if (sub_eclass->ec_sortref == 0) /* can't happen */ elog(ERROR, "volatile EquivalenceClass has no sortref"); - tle = get_sortgroupref_tle(sub_eclass->ec_sortref, sub_tlist); + tle = get_sortgroupref_tle(sub_eclass->ec_sortref, subquery_tlist); Assert(tle); /* resjunk items aren't visible to outer query */ if (!tle->resjunk) @@ -669,7 +670,7 @@ convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel, if (sub_member->em_is_child) continue; /* ignore children here */ - foreach(k, sub_tlist) + foreach(k, subquery_tlist) { TargetEntry *tle = (TargetEntry *) lfirst(k); Expr *tle_expr; |