|
7 | 7 | * Portions Copyright (c) 1994, Regents of the University of California
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.205 2006/07/31 20:09:00 tgl Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.206 2006/08/03 16:04:41 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -2090,52 +2090,45 @@ AfterTriggerExecute(AfterTriggerEvent event,
|
2090 | 2090 | /*
|
2091 | 2091 | * Fetch the required OLD and NEW tuples.
|
2092 | 2092 | */
|
| 2093 | +LocTriggerData.tg_trigtuple=NULL; |
| 2094 | +LocTriggerData.tg_newtuple=NULL; |
| 2095 | +LocTriggerData.tg_trigtuplebuf=InvalidBuffer; |
| 2096 | +LocTriggerData.tg_newtuplebuf=InvalidBuffer; |
| 2097 | + |
2093 | 2098 | if (ItemPointerIsValid(&(event->ate_oldctid)))
|
2094 | 2099 | {
|
2095 | 2100 | ItemPointerCopy(&(event->ate_oldctid),&(oldtuple.t_self));
|
2096 | 2101 | if (!heap_fetch(rel,SnapshotAny,&oldtuple,&oldbuffer, false,NULL))
|
2097 | 2102 | elog(ERROR,"failed to fetch old tuple for AFTER trigger");
|
| 2103 | +LocTriggerData.tg_trigtuple=&oldtuple; |
| 2104 | +LocTriggerData.tg_trigtuplebuf=oldbuffer; |
2098 | 2105 | }
|
2099 | 2106 |
|
2100 | 2107 | if (ItemPointerIsValid(&(event->ate_newctid)))
|
2101 | 2108 | {
|
2102 | 2109 | ItemPointerCopy(&(event->ate_newctid),&(newtuple.t_self));
|
2103 | 2110 | if (!heap_fetch(rel,SnapshotAny,&newtuple,&newbuffer, false,NULL))
|
2104 | 2111 | elog(ERROR,"failed to fetch new tuple for AFTER trigger");
|
| 2112 | +if (LocTriggerData.tg_trigtuple!=NULL) |
| 2113 | +{ |
| 2114 | +LocTriggerData.tg_newtuple=&newtuple; |
| 2115 | +LocTriggerData.tg_newtuplebuf=newbuffer; |
| 2116 | +} |
| 2117 | +else |
| 2118 | +{ |
| 2119 | +LocTriggerData.tg_trigtuple=&newtuple; |
| 2120 | +LocTriggerData.tg_trigtuplebuf=newbuffer; |
| 2121 | +} |
2105 | 2122 | }
|
2106 | 2123 |
|
2107 | 2124 | /*
|
2108 |
| - * Setup the trigger information |
| 2125 | + * Setup theremainingtrigger information |
2109 | 2126 | */
|
2110 | 2127 | LocTriggerData.type=T_TriggerData;
|
2111 | 2128 | LocTriggerData.tg_event=
|
2112 | 2129 | event->ate_event& (TRIGGER_EVENT_OPMASK |TRIGGER_EVENT_ROW);
|
2113 | 2130 | LocTriggerData.tg_relation=rel;
|
2114 | 2131 |
|
2115 |
| -switch (event->ate_event&TRIGGER_EVENT_OPMASK) |
2116 |
| -{ |
2117 |
| -caseTRIGGER_EVENT_INSERT: |
2118 |
| -LocTriggerData.tg_trigtuple=&newtuple; |
2119 |
| -LocTriggerData.tg_newtuple=NULL; |
2120 |
| -LocTriggerData.tg_trigtuplebuf=newbuffer; |
2121 |
| -LocTriggerData.tg_newtuplebuf=InvalidBuffer; |
2122 |
| -break; |
2123 |
| - |
2124 |
| -caseTRIGGER_EVENT_UPDATE: |
2125 |
| -LocTriggerData.tg_trigtuple=&oldtuple; |
2126 |
| -LocTriggerData.tg_newtuple=&newtuple; |
2127 |
| -LocTriggerData.tg_trigtuplebuf=oldbuffer; |
2128 |
| -LocTriggerData.tg_newtuplebuf=newbuffer; |
2129 |
| -break; |
2130 |
| - |
2131 |
| -caseTRIGGER_EVENT_DELETE: |
2132 |
| -LocTriggerData.tg_trigtuple=&oldtuple; |
2133 |
| -LocTriggerData.tg_newtuple=NULL; |
2134 |
| -LocTriggerData.tg_trigtuplebuf=oldbuffer; |
2135 |
| -LocTriggerData.tg_newtuplebuf=InvalidBuffer; |
2136 |
| -break; |
2137 |
| -} |
2138 |
| - |
2139 | 2132 | MemoryContextReset(per_tuple_context);
|
2140 | 2133 |
|
2141 | 2134 | /*
|
|