diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 15aa9c5087..5dd4f92720 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -833,6 +833,9 @@ subquery_planner(PlannerGlobal *glob, Query *parse, EXPRKIND_LIMIT); wc->endOffset = preprocess_expression(root, wc->endOffset, EXPRKIND_LIMIT); + wc->runCondition = (List *) preprocess_expression(root, + (Node *) wc->runCondition, + EXPRKIND_TARGET); } parse->limitOffset = preprocess_expression(root, parse->limitOffset, diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 57fea35e44..f2ff3dbffe 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -2187,6 +2187,17 @@ perform_pullup_replace_vars(PlannerInfo *root, pullup_replace_vars((Node *) otherrte->joinaliasvars, rvcontext); } + + foreach(lc, parse->windowClause) + { + WindowClause *wclause = lfirst_node(WindowClause, lc); + + if (wclause->runCondition) + wclause->runCondition = (List *) + pullup_replace_vars((Node *) wclause->runCondition, + rvcontext); + } + } /*