diff options
Diffstat (limited to 'src/backend/optimizer/plan/planner.c')
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 6770836dc89..75d93c08db2 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -77,6 +77,7 @@ create_upper_paths_hook_type create_upper_paths_hook = NULL; #define EXPRKIND_APPINFO 7 #define EXPRKIND_PHV 8 #define EXPRKIND_TABLESAMPLE 9 +#define EXPRKIND_ARBITER_ELEM 10 /* Passthrough data for standard_qp_callback */ typedef struct @@ -620,13 +621,23 @@ subquery_planner(PlannerGlobal *glob, Query *parse, if (parse->onConflict) { + parse->onConflict->arbiterElems = (List *) + preprocess_expression(root, + (Node *) parse->onConflict->arbiterElems, + EXPRKIND_ARBITER_ELEM); + parse->onConflict->arbiterWhere = + preprocess_expression(root, + parse->onConflict->arbiterWhere, + EXPRKIND_QUAL); parse->onConflict->onConflictSet = (List *) - preprocess_expression(root, (Node *) parse->onConflict->onConflictSet, + preprocess_expression(root, + (Node *) parse->onConflict->onConflictSet, EXPRKIND_TARGET); - parse->onConflict->onConflictWhere = - preprocess_expression(root, (Node *) parse->onConflict->onConflictWhere, + preprocess_expression(root, + parse->onConflict->onConflictWhere, EXPRKIND_QUAL); + /* exclRelTlist contains only Vars, so no preprocessing needed */ } root->append_rel_list = (List *) |