7
7
* Portions Copyright (c) 1994, Regents of the University of California
8
8
*
9
9
* 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 $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
40
40
41
41
static void InsertTrigger (TriggerDesc * trigdesc ,Trigger * trigger ,int indx );
42
42
static HeapTuple GetTupleForTrigger (EState * estate ,
43
- ResultRelInfo * relinfo ,
44
- ItemPointer tid ,
45
- TupleTableSlot * * newSlot );
43
+ ResultRelInfo * relinfo ,
44
+ ItemPointer tid ,
45
+ CommandId cid ,
46
+ TupleTableSlot * * newSlot );
46
47
static HeapTuple ExecCallTriggerFunc (TriggerData * trigdata ,
47
48
FmgrInfo * finfo ,
48
49
MemoryContext per_tuple_context );
@@ -1303,7 +1304,8 @@ ExecASDeleteTriggers(EState *estate, ResultRelInfo *relinfo)
1303
1304
1304
1305
bool
1305
1306
ExecBRDeleteTriggers (EState * estate ,ResultRelInfo * relinfo ,
1306
- ItemPointer tupleid )
1307
+ ItemPointer tupleid ,
1308
+ CommandId cid )
1307
1309
{
1308
1310
TriggerDesc * trigdesc = relinfo -> ri_TrigDesc ;
1309
1311
int ntrigs = trigdesc -> n_before_row [TRIGGER_EVENT_DELETE ];
@@ -1314,7 +1316,7 @@ ExecBRDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
1314
1316
TupleTableSlot * newSlot ;
1315
1317
int i ;
1316
1318
1317
- trigtuple = GetTupleForTrigger (estate ,relinfo ,tupleid ,& newSlot );
1319
+ trigtuple = GetTupleForTrigger (estate ,relinfo ,tupleid ,cid , & newSlot );
1318
1320
if (trigtuple == NULL )
1319
1321
return false;
1320
1322
@@ -1359,7 +1361,9 @@ ExecARDeleteTriggers(EState *estate, ResultRelInfo *relinfo,
1359
1361
if (trigdesc && trigdesc -> n_after_row [TRIGGER_EVENT_DELETE ]> 0 )
1360
1362
{
1361
1363
HeapTuple trigtuple = GetTupleForTrigger (estate ,relinfo ,
1362
- tupleid ,NULL );
1364
+ tupleid ,
1365
+ (CommandId )0 ,
1366
+ NULL );
1363
1367
1364
1368
DeferredTriggerSaveEvent (relinfo ,TRIGGER_EVENT_DELETE ,
1365
1369
true,trigtuple ,NULL );
@@ -1427,7 +1431,8 @@ ExecASUpdateTriggers(EState *estate, ResultRelInfo *relinfo)
1427
1431
1428
1432
HeapTuple
1429
1433
ExecBRUpdateTriggers (EState * estate ,ResultRelInfo * relinfo ,
1430
- ItemPointer tupleid ,HeapTuple newtuple )
1434
+ ItemPointer tupleid ,HeapTuple newtuple ,
1435
+ CommandId cid )
1431
1436
{
1432
1437
TriggerDesc * trigdesc = relinfo -> ri_TrigDesc ;
1433
1438
int ntrigs = trigdesc -> n_before_row [TRIGGER_EVENT_UPDATE ];
@@ -1439,7 +1444,7 @@ ExecBRUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
1439
1444
TupleTableSlot * newSlot ;
1440
1445
int i ;
1441
1446
1442
- trigtuple = GetTupleForTrigger (estate ,relinfo ,tupleid ,& newSlot );
1447
+ trigtuple = GetTupleForTrigger (estate ,relinfo ,tupleid ,cid , & newSlot );
1443
1448
if (trigtuple == NULL )
1444
1449
return NULL ;
1445
1450
@@ -1490,7 +1495,9 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
1490
1495
if (trigdesc && trigdesc -> n_after_row [TRIGGER_EVENT_UPDATE ]> 0 )
1491
1496
{
1492
1497
HeapTuple trigtuple = GetTupleForTrigger (estate ,relinfo ,
1493
- tupleid ,NULL );
1498
+ tupleid ,
1499
+ (CommandId )0 ,
1500
+ NULL );
1494
1501
1495
1502
DeferredTriggerSaveEvent (relinfo ,TRIGGER_EVENT_UPDATE ,
1496
1503
true,trigtuple ,newtuple );
@@ -1501,7 +1508,8 @@ ExecARUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
1501
1508
1502
1509
static HeapTuple
1503
1510
GetTupleForTrigger (EState * estate ,ResultRelInfo * relinfo ,
1504
- ItemPointer tid ,TupleTableSlot * * newSlot )
1511
+ ItemPointer tid ,CommandId cid ,
1512
+ TupleTableSlot * * newSlot )
1505
1513
{
1506
1514
Relation relation = relinfo -> ri_RelationDesc ;
1507
1515
HeapTupleData tuple ;
@@ -1518,8 +1526,7 @@ GetTupleForTrigger(EState *estate, ResultRelInfo *relinfo,
1518
1526
* newSlot = NULL ;
1519
1527
tuple .t_self = * tid ;
1520
1528
ltrmark :;
1521
- test = heap_mark4update (relation ,& tuple ,& buffer ,
1522
- GetCurrentCommandId ());
1529
+ test = heap_mark4update (relation ,& tuple ,& buffer ,cid );
1523
1530
switch (test )
1524
1531
{
1525
1532
case HeapTupleSelfUpdated :