Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6bb0d54

Browse files
committed
Fix a couple of small errors in trigger-list management, as per recent
discussion.
1 parent2750b11 commit6bb0d54

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

‎src/backend/commands/trigger.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.169 2004/09/06 23:32:54 tgl Exp $
10+
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.170 2004/09/07 21:48:30 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -2006,13 +2006,13 @@ deferredTriggerInvokeEvents(bool immediate_only)
20062006
inti;
20072007

20082008
/*
2009-
* Skip executing cancelled events, and eventsdone by
2010-
*transactions that are not aborted.
2009+
* Skip executing cancelled events, and eventsalready done,
2010+
*unless they were done by a subtransaction that later aborted.
20112011
*/
2012-
if (!(event->dte_event&TRIGGER_DEFERRED_CANCELED)||
2013-
(event->dte_event&TRIGGER_DEFERRED_DONE&&
2014-
TransactionIdIsValid(event->dte_done_xid)&&
2015-
!TransactionIdDidAbort(event->dte_done_xid)))
2012+
if (!(event->dte_event&TRIGGER_DEFERRED_CANCELED)&&
2013+
!(event->dte_event&TRIGGER_DEFERRED_DONE&&
2014+
TransactionIdIsValid(event->dte_done_xid)&&
2015+
!TransactionIdDidAbort(event->dte_done_xid)))
20162016
{
20172017
MemoryContextReset(per_tuple_context);
20182018

@@ -2091,7 +2091,7 @@ deferredTriggerInvokeEvents(bool immediate_only)
20912091
*/
20922092
next_event=event->dte_next;
20932093

2094-
if (still_deferred_ones)
2094+
if (still_deferred_ones|| !immediate_only)
20952095
{
20962096
/* Not done, keep in list */
20972097
prev_event=event;
@@ -2103,7 +2103,7 @@ deferredTriggerInvokeEvents(bool immediate_only)
21032103
* inside a subtransaction because it could abort later on. We
21042104
* will want to check the item again if it does.
21052105
*/
2106-
if (immediate_only&&!IsSubTransaction())
2106+
if (!IsSubTransaction())
21072107
{
21082108
/* delink it from list and free it */
21092109
if (prev_event)
@@ -2115,10 +2115,11 @@ deferredTriggerInvokeEvents(bool immediate_only)
21152115
else
21162116
{
21172117
/*
2118-
* Mark the event done.
2118+
* Mark the event-as-a-whole done, but keep it in the list.
21192119
*/
21202120
event->dte_event |=TRIGGER_DEFERRED_DONE;
21212121
event->dte_done_xid=GetCurrentTransactionId();
2122+
prev_event=event;
21222123
}
21232124
}
21242125

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp