aboutsummaryrefslogtreecommitdiff
path: root/src/backend/nodes/nodeFuncs.c
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2015-05-13 00:13:22 +0200
committerAndres Freund <andres@anarazel.de>2015-05-13 00:13:22 +0200
commit4af6e61a363246cf7fff3368a76603b0ce9945dd (patch)
tree95812a969e049a62dedc89eb60c96304b81f5a5a /src/backend/nodes/nodeFuncs.c
parent5c7df74204e2fb9440b576518d40fcf3ac65c8ac (diff)
downloadpostgresql-4af6e61a363246cf7fff3368a76603b0ce9945dd.tar.gz
postgresql-4af6e61a363246cf7fff3368a76603b0ce9945dd.zip
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.
Diffstat (limited to 'src/backend/nodes/nodeFuncs.c')
-rw-r--r--src/backend/nodes/nodeFuncs.c3
1 files changed, 3 insertions, 0 deletions
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;
}