runcondition_fix_v2.patch
text/plain
Filename: runcondition_fix_v2.patch
Type: text/plain
Part: 0
Patch
Format: unified
Series: patch v2
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/planner.c | 3 | 0 |
| src/backend/optimizer/prep/prepjointree.c | 11 | 0 |
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);
+ }
+
}
/*