Index: src/backend/commands/trigger.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/commands/trigger.c,v retrieving revision 1.205 diff -c -r1.205 trigger.c *** src/backend/commands/trigger.c 31 Jul 2006 20:09:00 -0000 1.205 --- src/backend/commands/trigger.c 2 Aug 2006 02:02:13 -0000 *************** *** 2090,2100 **** --- 2090,2107 ---- /* * Fetch the required OLD and NEW tuples. */ + LocTriggerData.tg_trigtuple = NULL; + LocTriggerData.tg_newtuple = NULL; + LocTriggerData.tg_trigtuplebuf = InvalidBuffer; + LocTriggerData.tg_newtuplebuf = InvalidBuffer; + if (ItemPointerIsValid(&(event->ate_oldctid))) { ItemPointerCopy(&(event->ate_oldctid), &(oldtuple.t_self)); if (!heap_fetch(rel, SnapshotAny, &oldtuple, &oldbuffer, false, NULL)) elog(ERROR, "failed to fetch old tuple for AFTER trigger"); + LocTriggerData.tg_trigtuple = &oldtuple; + LocTriggerData.tg_trigtuplebuf = oldbuffer; } if (ItemPointerIsValid(&(event->ate_newctid))) *************** *** 2102,2107 **** --- 2109,2124 ---- ItemPointerCopy(&(event->ate_newctid), &(newtuple.t_self)); if (!heap_fetch(rel, SnapshotAny, &newtuple, &newbuffer, false, NULL)) elog(ERROR, "failed to fetch new tuple for AFTER trigger"); + if (LocTriggerData.tg_trigtuple) + { + LocTriggerData.tg_newtuple = &newtuple; + LocTriggerData.tg_newtuplebuf = newbuffer; + } + else + { + LocTriggerData.tg_trigtuple = &newtuple; + LocTriggerData.tg_trigtuplebuf = newbuffer; + } } /* *************** *** 2112,2141 **** event->ate_event & (TRIGGER_EVENT_OPMASK | TRIGGER_EVENT_ROW); LocTriggerData.tg_relation = rel; - switch (event->ate_event & TRIGGER_EVENT_OPMASK) - { - case TRIGGER_EVENT_INSERT: - LocTriggerData.tg_trigtuple = &newtuple; - LocTriggerData.tg_newtuple = NULL; - LocTriggerData.tg_trigtuplebuf = newbuffer; - LocTriggerData.tg_newtuplebuf = InvalidBuffer; - break; - - case TRIGGER_EVENT_UPDATE: - LocTriggerData.tg_trigtuple = &oldtuple; - LocTriggerData.tg_newtuple = &newtuple; - LocTriggerData.tg_trigtuplebuf = oldbuffer; - LocTriggerData.tg_newtuplebuf = newbuffer; - break; - - case TRIGGER_EVENT_DELETE: - LocTriggerData.tg_trigtuple = &oldtuple; - LocTriggerData.tg_newtuple = NULL; - LocTriggerData.tg_trigtuplebuf = oldbuffer; - LocTriggerData.tg_newtuplebuf = InvalidBuffer; - break; - } - MemoryContextReset(per_tuple_context); /* --- 2129,2134 ----