summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera2022-09-27 08:44:42 +0000
committerAlvaro Herrera2022-09-27 08:44:42 +0000
commit249b0409b181311bb1c375311e43eb767b5c3bdd (patch)
tree4fe99b3693dde97b23c63b2505e2a4ae74ab6297 /src
parentbed0927aeb0c61bd8649b56e5b84a6d551d5f416 (diff)
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 <[email protected]> Reviewed-by: Julien Rouhaud <[email protected]> Discussion: https://postgr.es/m/[email protected]
Diffstat (limited to 'src')
-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 724d076674e..0a7b22f97e7 100644
--- a/src/backend/nodes/nodeFuncs.c
+++ b/src/backend/nodes/nodeFuncs.c
@@ -2259,10 +2259,10 @@ expression_tree_walker_impl(Node *node,
{
MergeAction *action = (MergeAction *) node;
- if (WALK(action->targetList))
- return true;
if (WALK(action->qual))
return true;
+ if (WALK(action->targetList))
+ return true;
}
break;
case T_PartitionPruneStepOp:
diff --git a/src/backend/utils/misc/queryjumble.c b/src/backend/utils/misc/queryjumble.c
index 6e75acda274..a8508463e77 100644
--- a/src/backend/utils/misc/queryjumble.c
+++ b/src/backend/utils/misc/queryjumble.c
@@ -248,6 +248,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);
@@ -738,6 +739,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)
{