From: Tom Lane Date: Mon, 25 Nov 2002 03:36:50 +0000 (+0000) Subject: Un-break triggers declared for INSERT OR DELETE OR UPDATE. This worked X-Git-Tag: REL7_4_BETA1~1487 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0aa5b6866e5f72f094b79ff41c5d36d81800f964;p=postgresql Un-break triggers declared for INSERT OR DELETE OR UPDATE. This worked okay in 7.3, so I think it must have been busted in the recent triggers patch. --- diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index c9e2d87ff9..921a11f84c 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.140 2002/11/23 03:59:07 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.141 2002/11/25 03:36:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -199,7 +199,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) if (stmt->row) TRIGGER_SETT_ROW(tgtype); - for (i = 0; i < 2 && stmt->actions[i]; i++) + for (i = 0; stmt->actions[i]; i++) { switch (stmt->actions[i]) { diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 29cba53f9f..df09e0177c 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.381 2002/11/23 03:59:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.382 2002/11/25 03:36:50 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -2027,7 +2027,7 @@ CreateTrigStmt: n->args = $13; n->before = $4; n->row = $8; - memcpy (n->actions, $5, 4); + memcpy(n->actions, $5, 4); n->isconstraint = FALSE; n->deferrable = FALSE; n->initdeferred = FALSE; @@ -2047,7 +2047,7 @@ CreateTrigStmt: n->args = $18; n->before = FALSE; n->row = TRUE; - memcpy (n->actions, $6, 4); + memcpy(n->actions, $6, 4); n->isconstraint = TRUE; n->deferrable = ($10 & 1) != 0; n->initdeferred = ($10 & 2) != 0; @@ -2066,17 +2066,19 @@ TriggerEvents: TriggerOneEvent { char *e = palloc(4); - e[0] = $1; e[1] = 0; $$ = e; + e[0] = $1; e[1] = '\0'; + $$ = e; } | TriggerOneEvent OR TriggerOneEvent { char *e = palloc(4); - e[0] = $1; e[1] = $3; e[2] = 0; $$ = e; + 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[0] = $1; e[1] = $3; e[2] = $5; e[3] = '\0'; $$ = e; } ; diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 0d33b56d1f..7ca79b3520 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.217 2002/11/23 03:59:09 momjian Exp $ + * $Id: parsenodes.h,v 1.218 2002/11/25 03:36:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1048,7 +1048,7 @@ typedef struct CreateTrigStmt List *args; /* list of (T_String) Values or NIL */ bool before; /* BEFORE/AFTER */ bool row; /* ROW/STATEMENT */ - char actions[3]; /* Insert, Update, Delete */ + char actions[4]; /* 1 to 3 of 'i', 'u', 'd', + trailing \0 */ /* The following are used for referential */ /* integrity constraint triggers */