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

Commitbf576cc

Browse files
committed
GetTupleForTrigger must use outer transaction's command counter for time
qual checking, not GetCurrentCommandId. Per test case from Steve Wolfe.
1 parent89508a8 commitbf576cc

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

‎src/backend/commands/trigger.c

Lines changed: 20 additions & 13 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-
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.145 2003/02/09 06:56:26 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.146 2003/03/27 14:33:11 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -40,9 +40,10 @@
4040

4141
staticvoidInsertTrigger(TriggerDesc*trigdesc,Trigger*trigger,intindx);
4242
staticHeapTupleGetTupleForTrigger(EState*estate,
43-
ResultRelInfo*relinfo,
44-
ItemPointertid,
45-
TupleTableSlot**newSlot);
43+
ResultRelInfo*relinfo,
44+
ItemPointertid,
45+
CommandIdcid,
46+
TupleTableSlot**newSlot);
4647
staticHeapTupleExecCallTriggerFunc(TriggerData*trigdata,
4748
FmgrInfo*finfo,
4849
MemoryContextper_tuple_context);
@@ -1303,7 +1304,8 @@ ExecASDeleteTriggers(EState *estate, ResultRelInfo *relinfo)
13031304

13041305
bool
13051306
ExecBRDeleteTriggers(EState*estate,ResultRelInfo*relinfo,
1306-
ItemPointertupleid)
1307+
ItemPointertupleid,
1308+
CommandIdcid)
13071309
{
13081310
TriggerDesc*trigdesc=relinfo->ri_TrigDesc;
13091311
intntrigs=trigdesc->n_before_row[TRIGGER_EVENT_DELETE];
@@ -1314,7 +1316,7 @@ ExecBRDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
13141316
TupleTableSlot*newSlot;
13151317
inti;
13161318

1317-
trigtuple=GetTupleForTrigger(estate,relinfo,tupleid,&newSlot);
1319+
trigtuple=GetTupleForTrigger(estate,relinfo,tupleid,cid,&newSlot);
13181320
if (trigtuple==NULL)
13191321
return false;
13201322

@@ -1359,7 +1361,9 @@ ExecARDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
13591361
if (trigdesc&&trigdesc->n_after_row[TRIGGER_EVENT_DELETE]>0)
13601362
{
13611363
HeapTupletrigtuple=GetTupleForTrigger(estate,relinfo,
1362-
tupleid,NULL);
1364+
tupleid,
1365+
(CommandId)0,
1366+
NULL);
13631367

13641368
DeferredTriggerSaveEvent(relinfo,TRIGGER_EVENT_DELETE,
13651369
true,trigtuple,NULL);
@@ -1427,7 +1431,8 @@ ExecASUpdateTriggers(EState *estate, ResultRelInfo *relinfo)
14271431

14281432
HeapTuple
14291433
ExecBRUpdateTriggers(EState*estate,ResultRelInfo*relinfo,
1430-
ItemPointertupleid,HeapTuplenewtuple)
1434+
ItemPointertupleid,HeapTuplenewtuple,
1435+
CommandIdcid)
14311436
{
14321437
TriggerDesc*trigdesc=relinfo->ri_TrigDesc;
14331438
intntrigs=trigdesc->n_before_row[TRIGGER_EVENT_UPDATE];
@@ -1439,7 +1444,7 @@ ExecBRUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
14391444
TupleTableSlot*newSlot;
14401445
inti;
14411446

1442-
trigtuple=GetTupleForTrigger(estate,relinfo,tupleid,&newSlot);
1447+
trigtuple=GetTupleForTrigger(estate,relinfo,tupleid,cid,&newSlot);
14431448
if (trigtuple==NULL)
14441449
returnNULL;
14451450

@@ -1490,7 +1495,9 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
14901495
if (trigdesc&&trigdesc->n_after_row[TRIGGER_EVENT_UPDATE]>0)
14911496
{
14921497
HeapTupletrigtuple=GetTupleForTrigger(estate,relinfo,
1493-
tupleid,NULL);
1498+
tupleid,
1499+
(CommandId)0,
1500+
NULL);
14941501

14951502
DeferredTriggerSaveEvent(relinfo,TRIGGER_EVENT_UPDATE,
14961503
true,trigtuple,newtuple);
@@ -1501,7 +1508,8 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
15011508

15021509
staticHeapTuple
15031510
GetTupleForTrigger(EState*estate,ResultRelInfo*relinfo,
1504-
ItemPointertid,TupleTableSlot**newSlot)
1511+
ItemPointertid,CommandIdcid,
1512+
TupleTableSlot**newSlot)
15051513
{
15061514
Relationrelation=relinfo->ri_RelationDesc;
15071515
HeapTupleDatatuple;
@@ -1518,8 +1526,7 @@ GetTupleForTrigger(EState *estate, ResultRelInfo *relinfo,
15181526
*newSlot=NULL;
15191527
tuple.t_self=*tid;
15201528
ltrmark:;
1521-
test=heap_mark4update(relation,&tuple,&buffer,
1522-
GetCurrentCommandId());
1529+
test=heap_mark4update(relation,&tuple,&buffer,cid);
15231530
switch (test)
15241531
{
15251532
caseHeapTupleSelfUpdated:

‎src/backend/executor/execMain.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*
2727
*
2828
* IDENTIFICATION
29-
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.203 2003/03/20 03:34:55 momjian Exp $
29+
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.204 2003/03/27 14:33:11 tgl Exp $
3030
*
3131
*-------------------------------------------------------------------------
3232
*/
@@ -1385,7 +1385,8 @@ ExecDelete(TupleTableSlot *slot,
13851385
{
13861386
booldodelete;
13871387

1388-
dodelete=ExecBRDeleteTriggers(estate,resultRelInfo,tupleid);
1388+
dodelete=ExecBRDeleteTriggers(estate,resultRelInfo,tupleid,
1389+
estate->es_snapshot->curcid);
13891390

13901391
if (!dodelete)/* "do nothing" */
13911392
return;
@@ -1495,7 +1496,8 @@ ExecUpdate(TupleTableSlot *slot,
14951496
HeapTuplenewtuple;
14961497

14971498
newtuple=ExecBRUpdateTriggers(estate,resultRelInfo,
1498-
tupleid,tuple);
1499+
tupleid,tuple,
1500+
estate->es_snapshot->curcid);
14991501

15001502
if (newtuple==NULL)/* "do nothing" */
15011503
return;

‎src/include/commands/trigger.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: trigger.h,v 1.40 2002/11/23 03:59:09 momjian Exp $
9+
* $Id: trigger.h,v 1.41 2003/03/27 14:33:11 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -131,8 +131,9 @@ extern void ExecBSDeleteTriggers(EState *estate,
131131
externvoidExecASDeleteTriggers(EState*estate,
132132
ResultRelInfo*relinfo);
133133
externboolExecBRDeleteTriggers(EState*estate,
134-
ResultRelInfo*relinfo,
135-
ItemPointertupleid);
134+
ResultRelInfo*relinfo,
135+
ItemPointertupleid,
136+
CommandIdcid);
136137
externvoidExecARDeleteTriggers(EState*estate,
137138
ResultRelInfo*relinfo,
138139
ItemPointertupleid);
@@ -141,9 +142,10 @@ extern void ExecBSUpdateTriggers(EState *estate,
141142
externvoidExecASUpdateTriggers(EState*estate,
142143
ResultRelInfo*relinfo);
143144
externHeapTupleExecBRUpdateTriggers(EState*estate,
144-
ResultRelInfo*relinfo,
145-
ItemPointertupleid,
146-
HeapTuplenewtuple);
145+
ResultRelInfo*relinfo,
146+
ItemPointertupleid,
147+
HeapTuplenewtuple,
148+
CommandIdcid);
147149
externvoidExecARUpdateTriggers(EState*estate,
148150
ResultRelInfo*relinfo,
149151
ItemPointertupleid,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp