summaryrefslogtreecommitdiff
path: root/src/include/commands/trigger.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-10-30 20:53:06 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-10-30 20:53:06 +0000
commit80559fa9e9657ecfdb92a210971b8d0aa6e82e39 (patch)
tree9580827e5de6b17cc7bd66a9c36bc5e119a872c4 /src/include/commands/trigger.h
parent88868d4fbcef1e5d608c0305670465a2a0651c9e (diff)
downloadpostgresql-80559fa9e9657ecfdb92a210971b8d0aa6e82e39.tar.gz
I found a corner case in which it is possible for RI_FKey_check's call
of HeapTupleSatisfiesItself() to trigger a hint-bit update on the tuple: if the row was updated or deleted by a subtransaction of my own transaction that was later rolled back. This cannot occur in pre-8.0 of course, so the hint-bit patch applied a couple weeks ago is OK for existing releases. But for 8.0 it seems we had better fix things so that RI_FKey_check can pass the correct buffer number to HeapTupleSatisfiesItself. Accordingly, add fields to the TriggerData struct to carry the buffer ID(s) for the old and new tuple(s). There are other possible solutions but this one seems cleanest; it will allow other AFTER-trigger functions to safely do tqual.c calls if they want to. Put new fields at end of struct so that there is no API breakage.
Diffstat (limited to 'src/include/commands/trigger.h')
-rw-r--r--src/include/commands/trigger.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/include/commands/trigger.h b/src/include/commands/trigger.h
index 7d5569018a..a271a2a3ea 100644
--- a/src/include/commands/trigger.h
+++ b/src/include/commands/trigger.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/commands/trigger.h,v 1.49 2004/09/10 18:40:06 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/commands/trigger.h,v 1.50 2004/10/30 20:53:06 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,6 +34,8 @@ typedef struct TriggerData
HeapTuple tg_trigtuple;
HeapTuple tg_newtuple;
Trigger *tg_trigger;
+ Buffer tg_trigtuplebuf;
+ Buffer tg_newtuplebuf;
} TriggerData;
/* TriggerEvent bit flags */