runcondition_fix_v2.patch

text/plain

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);
+	}
+
 }
 
 /*