aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
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
commit249b0409b181311bb1c375311e43eb767b5c3bdd (patch)
tree4fe99b3693dde97b23c63b2505e2a4ae74ab6297 /src/backend/utils
parentbed0927aeb0c61bd8649b56e5b84a6d551d5f416 (diff)
downloadpostgresql-249b0409b181311bb1c375311e43eb767b5c3bdd.tar.gz
postgresql-249b0409b181311bb1c375311e43eb767b5c3bdd.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/utils')
-rw-r--r--src/backend/utils/misc/queryjumble.c11
1 files changed, 11 insertions, 0 deletions
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)
{