11
11
*
12
12
*
13
13
* IDENTIFICATION
14
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.664 2009/05/27 20:42:29 tgl Exp $
14
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.665 2009/06/18 01:27:02 tgl Exp $
15
15
*
16
16
* HISTORY
17
17
* AUTHOR DATE MAJOR EVENT
53
53
54
54
#include " catalog/index.h"
55
55
#include " catalog/namespace.h"
56
+ #include " catalog/pg_trigger.h"
56
57
#include " commands/defrem.h"
57
58
#include " nodes/makefuncs.h"
58
59
#include " nodes/nodeFuncs.h"
@@ -244,7 +245,7 @@ static TypeName *TableFuncTypeName(List *columns);
244
245
%type <boolean> TriggerActionTime TriggerForSpec opt_trusted opt_restart_seqs
245
246
%type <str> opt_lancompiler
246
247
247
- %type <str> TriggerEvents
248
+ %type <ival> TriggerEvents TriggerOneEvent
248
249
%type <value> TriggerFuncArg
249
250
250
251
%type <str> relation_name copy_file_name
@@ -266,7 +267,6 @@ static TypeName *TableFuncTypeName(List *columns);
266
267
%type <privtarget> privilege_target
267
268
%type <funwithargs> function_with_argtypes
268
269
%type <list> function_with_argtypes_list
269
- %type <chr> TriggerOneEvent
270
270
271
271
%type <list> stmtblock stmtmulti
272
272
OptTableElementList TableElementList OptInherit definition
@@ -3133,7 +3133,7 @@ CreateTrigStmt:
3133
3133
n->args = $13 ;
3134
3134
n->before = $4 ;
3135
3135
n->row = $8 ;
3136
- memcpy ( n->actions, $ 5 , 4 ) ;
3136
+ n->events = $5 ;
3137
3137
n->isconstraint = FALSE ;
3138
3138
n->deferrable = FALSE ;
3139
3139
n->initdeferred = FALSE ;
@@ -3153,11 +3153,10 @@ CreateTrigStmt:
3153
3153
n->args = $18 ;
3154
3154
n->before = FALSE ;
3155
3155
n->row = TRUE ;
3156
- memcpy ( n->actions, $ 6 , 4 ) ;
3156
+ n->events = $6 ;
3157
3157
n->isconstraint = TRUE ;
3158
3158
n->deferrable = ($10 & 1 ) != 0 ;
3159
3159
n->initdeferred = ($10 & 2 ) != 0 ;
3160
-
3161
3160
n->constrrel = $9 ;
3162
3161
$$ = (Node *)n;
3163
3162
}
@@ -3170,30 +3169,20 @@ TriggerActionTime:
3170
3169
3171
3170
TriggerEvents :
3172
3171
TriggerOneEvent
3172
+ { $$ = $1 ; }
3173
+ | TriggerEvents OR TriggerOneEvent
3173
3174
{
3174
- char *e = palloc(4 );
3175
- e[0 ] = $1 ; e[1 ] = ' \0 ' ;
3176
- $$ = e;
3177
- }
3178
- | TriggerOneEvent OR TriggerOneEvent
3179
- {
3180
- char *e = palloc(4 );
3181
- e[0 ] = $1 ; e[1 ] = $3 ; e[2 ] = ' \0 ' ;
3182
- $$ = e;
3183
- }
3184
- | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
3185
- {
3186
- char *e = palloc(4 );
3187
- e[0 ] = $1 ; e[1 ] = $3 ; e[2 ] = $5 ; e[3 ] = ' \0 ' ;
3188
- $$ = e;
3175
+ if ($1 & $3 )
3176
+ yyerror (" duplicate trigger events specified" );
3177
+ $$ = $1 | $3 ;
3189
3178
}
3190
3179
;
3191
3180
3192
3181
TriggerOneEvent :
3193
- INSERT { $$ = ' i ' ; }
3194
- | DELETE_P { $$ = ' d ' ; }
3195
- | UPDATE { $$ = ' u ' ; }
3196
- | TRUNCATE { $$ = ' t ' ; }
3182
+ INSERT { $$ = TRIGGER_TYPE_INSERT ; }
3183
+ | DELETE_P { $$ = TRIGGER_TYPE_DELETE ; }
3184
+ | UPDATE { $$ = TRIGGER_TYPE_UPDATE ; }
3185
+ | TRUNCATE { $$ = TRIGGER_TYPE_TRUNCATE ; }
3197
3186
;
3198
3187
3199
3188
TriggerForSpec :
0 commit comments