From 4af6e61a363246cf7fff3368a76603b0ce9945dd Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Wed, 13 May 2015 00:13:22 +0200 Subject: Fix ON CONFLICT bugs that manifest when used in rules. Specifically the tlist and rti of the pseudo "excluded" relation weren't properly treated by expression_tree_walker, which lead to errors when excluded was referenced inside a rule because the varnos where not properly adjusted. Similar omissions in OffsetVarNodes and expression_tree_mutator had less impact, but should obviously be fixed nonetheless. A couple tests of for ON CONFLICT UPDATE into INSERT rule bearing relations have been added. In passing I updated a couple comments. --- src/backend/nodes/nodeFuncs.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/backend/nodes/nodeFuncs.c') diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index 4135f9c3cfc..eac02159236 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -1922,6 +1922,8 @@ expression_tree_walker(Node *node, return true; if (walker(onconflict->onConflictWhere, context)) return true; + if (walker(onconflict->exclRelTlist, context)) + return true; } break; case T_JoinExpr: @@ -2642,6 +2644,7 @@ expression_tree_mutator(Node *node, MUTATE(newnode->arbiterWhere, oc->arbiterWhere, Node *); MUTATE(newnode->onConflictSet, oc->onConflictSet, List *); MUTATE(newnode->onConflictWhere, oc->onConflictWhere, Node *); + MUTATE(newnode->exclRelTlist, oc->exclRelTlist, List *); return (Node *) newnode; } -- cgit v1.2.3