lateral-function-pullup-bug-wip.patch
text/x-diff
Filename: lateral-function-pullup-bug-wip.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/optimizer/plan/planner.c | 3 | 3 |
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 1e42d75465..56722616a3 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -1085,7 +1085,8 @@ preprocess_expression(PlannerInfo *root, Node *expr, int kind) /* * Simplify constant expressions. For function RTEs, this was already * done by preprocess_function_rtes ... but we have to do it again if the - * RTE is LATERAL and might have contained join alias variables. + * RTE is LATERAL, as it might contain un-simplified subexpressions + * inserted by flattening of subqueries or join alias variables. * * Note: an essential effect of this is to convert named-argument function * calls to positional notation and insert the current actual values of @@ -1099,8 +1100,7 @@ preprocess_expression(PlannerInfo *root, Node *expr, int kind) * careful to maintain AND/OR flatness --- that is, do not generate a tree * with AND directly under AND, nor OR directly under OR. */ - if (!(kind == EXPRKIND_RTFUNC || - (kind == EXPRKIND_RTFUNC_LATERAL && !root->hasJoinRTEs))) + if (kind != EXPRKIND_RTFUNC) expr = eval_const_expressions(root, expr); /*