mirror of
https://github.com/postgres/postgres.git
synced 2025-08-18 12:22:09 +03:00
Fix MERGE command tag for actions blocked by BEFORE ROW triggers.
This ensures that the row count in the command tag for a MERGE is correctly computed in the case where UPDATEs or DELETEs are skipped due to a BEFORE ROW trigger returning NULL (the INSERT case was already handled correctly by ExecMergeNotMatched() calling ExecInsert()). Back-patch to v15, where MERGE was introduced. Discussion: https://postgr.es/m/CAEZATCU8XEmR0JWKDtyb7iZ%3DqCffxS9uyJt0iOZ4TV4RT%2Bow1w%40mail.gmail.com
This commit is contained in:
@@ -2867,8 +2867,9 @@ lmerge_matched:;
|
||||
if (!ExecUpdatePrologue(context, resultRelInfo,
|
||||
tupleid, NULL, newslot, &result))
|
||||
{
|
||||
/* Blocked by trigger, or concurrent update/delete */
|
||||
break;
|
||||
if (result == TM_Ok)
|
||||
return true; /* "do nothing" */
|
||||
break; /* concurrent update/delete */
|
||||
}
|
||||
result = ExecUpdateAct(context, resultRelInfo, tupleid, NULL,
|
||||
newslot, false, &updateCxt);
|
||||
@@ -2885,8 +2886,9 @@ lmerge_matched:;
|
||||
if (!ExecDeletePrologue(context, resultRelInfo, tupleid,
|
||||
NULL, NULL, &result))
|
||||
{
|
||||
/* Blocked by trigger, or concurrent update/delete */
|
||||
break;
|
||||
if (result == TM_Ok)
|
||||
return true; /* "do nothing" */
|
||||
break; /* concurrent update/delete */
|
||||
}
|
||||
result = ExecDeleteAct(context, resultRelInfo, tupleid, false);
|
||||
if (result == TM_Ok)
|
||||
|
Reference in New Issue
Block a user