|
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.247 2009/06/11 14:48:56 momjian Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.248 2009/06/18 01:27:02 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -100,7 +100,6 @@ CreateTrigger(CreateTrigStmt *stmt, Oid constraintOid, bool checkPermissions)
|
100 | 100 | Oidfuncoid;
|
101 | 101 | Oidfuncrettype;
|
102 | 102 | Oidtrigoid;
|
103 |
| -inti; |
104 | 103 | charconstrtrigname[NAMEDATALEN];
|
105 | 104 | char*trigname;
|
106 | 105 | char*constrname;
|
@@ -150,50 +149,13 @@ CreateTrigger(CreateTrigStmt *stmt, Oid constraintOid, bool checkPermissions)
|
150 | 149 | TRIGGER_SETT_BEFORE(tgtype);
|
151 | 150 | if (stmt->row)
|
152 | 151 | TRIGGER_SETT_ROW(tgtype);
|
| 152 | +tgtype |=stmt->events; |
153 | 153 |
|
154 |
| -for (i=0;stmt->actions[i];i++) |
155 |
| -{ |
156 |
| -switch (stmt->actions[i]) |
157 |
| -{ |
158 |
| -case'i': |
159 |
| -if (TRIGGER_FOR_INSERT(tgtype)) |
160 |
| -ereport(ERROR, |
161 |
| -(errcode(ERRCODE_SYNTAX_ERROR), |
162 |
| -errmsg("multiple INSERT events specified"))); |
163 |
| -TRIGGER_SETT_INSERT(tgtype); |
164 |
| -break; |
165 |
| -case'd': |
166 |
| -if (TRIGGER_FOR_DELETE(tgtype)) |
167 |
| -ereport(ERROR, |
168 |
| -(errcode(ERRCODE_SYNTAX_ERROR), |
169 |
| -errmsg("multiple DELETE events specified"))); |
170 |
| -TRIGGER_SETT_DELETE(tgtype); |
171 |
| -break; |
172 |
| -case'u': |
173 |
| -if (TRIGGER_FOR_UPDATE(tgtype)) |
174 |
| -ereport(ERROR, |
175 |
| -(errcode(ERRCODE_SYNTAX_ERROR), |
176 |
| -errmsg("multiple UPDATE events specified"))); |
177 |
| -TRIGGER_SETT_UPDATE(tgtype); |
178 |
| -break; |
179 |
| -case't': |
180 |
| -if (TRIGGER_FOR_TRUNCATE(tgtype)) |
181 |
| -ereport(ERROR, |
182 |
| -(errcode(ERRCODE_SYNTAX_ERROR), |
183 |
| -errmsg("multiple TRUNCATE events specified"))); |
184 |
| -TRIGGER_SETT_TRUNCATE(tgtype); |
185 |
| -/* Disallow ROW-level TRUNCATE triggers */ |
186 |
| -if (stmt->row) |
187 |
| -ereport(ERROR, |
188 |
| -(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
189 |
| -errmsg("TRUNCATE FOR EACH ROW triggers are not supported"))); |
190 |
| -break; |
191 |
| -default: |
192 |
| -elog(ERROR,"unrecognized trigger event: %d", |
193 |
| - (int)stmt->actions[i]); |
194 |
| -break; |
195 |
| -} |
196 |
| -} |
| 154 | +/* Disallow ROW-level TRUNCATE triggers */ |
| 155 | +if (TRIGGER_FOR_ROW(tgtype)&&TRIGGER_FOR_TRUNCATE(tgtype)) |
| 156 | +ereport(ERROR, |
| 157 | +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), |
| 158 | +errmsg("TRUNCATE FOR EACH ROW triggers are not supported"))); |
197 | 159 |
|
198 | 160 | /*
|
199 | 161 | * Find and validate the trigger function.
|
|