|
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 | /* |
|