aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/gram.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/gram.y')
-rw-r--r--src/backend/parser/gram.y39
1 files changed, 14 insertions, 25 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 544b69246ed..280443074f5 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.664 2009/05/27 20:42:29 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.665 2009/06/18 01:27:02 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -53,6 +53,7 @@
#include "catalog/index.h"
#include "catalog/namespace.h"
+#include "catalog/pg_trigger.h"
#include "commands/defrem.h"
#include "nodes/makefuncs.h"
#include "nodes/nodeFuncs.h"
@@ -244,7 +245,7 @@ static TypeName *TableFuncTypeName(List *columns);
%type <boolean> TriggerActionTime TriggerForSpec opt_trusted opt_restart_seqs
%type <str> opt_lancompiler
-%type <str> TriggerEvents
+%type <ival> TriggerEvents TriggerOneEvent
%type <value> TriggerFuncArg
%type <str> relation_name copy_file_name
@@ -266,7 +267,6 @@ static TypeName *TableFuncTypeName(List *columns);
%type <privtarget> privilege_target
%type <funwithargs> function_with_argtypes
%type <list> function_with_argtypes_list
-%type <chr> TriggerOneEvent
%type <list> stmtblock stmtmulti
OptTableElementList TableElementList OptInherit definition
@@ -3133,7 +3133,7 @@ CreateTrigStmt:
n->args = $13;
n->before = $4;
n->row = $8;
- memcpy(n->actions, $5, 4);
+ n->events = $5;
n->isconstraint = FALSE;
n->deferrable = FALSE;
n->initdeferred = FALSE;
@@ -3153,11 +3153,10 @@ CreateTrigStmt:
n->args = $18;
n->before = FALSE;
n->row = TRUE;
- memcpy(n->actions, $6, 4);
+ n->events = $6;
n->isconstraint = TRUE;
n->deferrable = ($10 & 1) != 0;
n->initdeferred = ($10 & 2) != 0;
-
n->constrrel = $9;
$$ = (Node *)n;
}
@@ -3170,30 +3169,20 @@ TriggerActionTime:
TriggerEvents:
TriggerOneEvent
+ { $$ = $1; }
+ | TriggerEvents OR TriggerOneEvent
{
- char *e = palloc(4);
- e[0] = $1; e[1] = '\0';
- $$ = e;
- }
- | TriggerOneEvent OR TriggerOneEvent
- {
- char *e = palloc(4);
- e[0] = $1; e[1] = $3; e[2] = '\0';
- $$ = e;
- }
- | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
- {
- char *e = palloc(4);
- e[0] = $1; e[1] = $3; e[2] = $5; e[3] = '\0';
- $$ = e;
+ if ($1 & $3)
+ yyerror("duplicate trigger events specified");
+ $$ = $1 | $3;
}
;
TriggerOneEvent:
- INSERT { $$ = 'i'; }
- | DELETE_P { $$ = 'd'; }
- | UPDATE { $$ = 'u'; }
- | TRUNCATE { $$ = 't'; }
+ INSERT { $$ = TRIGGER_TYPE_INSERT; }
+ | DELETE_P { $$ = TRIGGER_TYPE_DELETE; }
+ | UPDATE { $$ = TRIGGER_TYPE_UPDATE; }
+ | TRUNCATE { $$ = TRIGGER_TYPE_TRUNCATE; }
;
TriggerForSpec: