aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2022-09-27 10:44:42 +0200
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2022-09-27 10:44:42 +0200
commit72abf03b6491a8df880e1fea45798797bcc86c47 (patch)
tree92cd81d3c7ad1ceb657ff69f23811d4634649333 /src/backend
parentd1f95fa2476bcf427a3e3677f67ceee26552e23e (diff)
downloadpostgresql-72abf03b6491a8df880e1fea45798797bcc86c47.tar.gz
postgresql-72abf03b6491a8df880e1fea45798797bcc86c47.zip
Fix pg_stat_statements for MERGE
We weren't jumbling the merge action list, so wildly different commands would be considered to use the same query ID. Add that, mention it in the docs, and some test lines. Backpatch to 15. Author: Tatsu <bt22nakamorit@oss.nttdata.com> Reviewed-by: Julien Rouhaud <rjuju123@gmail.com> Discussion: https://postgr.es/m/d87e391694db75a038abc3b2597828e8@oss.nttdata.com
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/nodes/nodeFuncs.c4
-rw-r--r--src/backend/utils/misc/queryjumble.c11
2 files changed, 13 insertions, 2 deletions
diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c
index 3bac350bf50..6029da3ee1f 100644
--- a/src/backend/nodes/nodeFuncs.c
+++ b/src/backend/nodes/nodeFuncs.c
@@ -2266,10 +2266,10 @@ expression_tree_walker(Node *node,
{
MergeAction *action = (MergeAction *) node;
- if (walker(action->targetList, context))
- return true;
if (walker(action->qual, context))
return true;
+ if (walker(action->targetList, context))
+ return true;
}
break;
case T_PartitionPruneStepOp:
diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c
index a67487e5fe8..1224bb6c660 100644
--- a/src/backend/utils/misc/queryjumble.c
+++ b/src/backend/utils/misc/queryjumble.c
@@ -247,6 +247,7 @@ JumbleQueryInternal(JumbleState *jstate, Query *query)
JumbleExpr(jstate, (Node *) query->cteList);
JumbleRangeTable(jstate, query->rtable);
JumbleExpr(jstate, (Node *) query->jointree);
+ JumbleExpr(jstate, (Node *) query->mergeActionList);
JumbleExpr(jstate, (Node *) query->targetList);
JumbleExpr(jstate, (Node *) query->onConflict);
JumbleExpr(jstate, (Node *) query->returningList);
@@ -737,6 +738,16 @@ JumbleExpr(JumbleState *jstate, Node *node)
JumbleExpr(jstate, (Node *) conf->exclRelTlist);
}
break;
+ case T_MergeAction:
+ {
+ MergeAction *mergeaction = (MergeAction *) node;
+
+ APP_JUMB(mergeaction->matched);
+ APP_JUMB(mergeaction->commandType);
+ JumbleExpr(jstate, mergeaction->qual);
+ JumbleExpr(jstate, (Node *) mergeaction->targetList);
+ }
+ break;
case T_List:
foreach(temp, (List *) node)
{