Re: [HACKERS] Cannot use all four trigger events at once

From: "Greg Sabino Mullane" <greg(at)turnstep(dot)com>
To: tgl(at)sss(dot)pgh(dot)pa(dot)us
Cc: pgsql-hackers(at)postgresql(dot)org,pgsql-bugs(at)postgresql(dot)org
Subject: Re: [HACKERS] Cannot use all four trigger events at once
Date: 2009-06-18 00:45:45
Message-ID: b1c2e251e40add84f48d06e46c659bd6@biglumber.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers


-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160
NotDashEscaped: You need GnuPG to verify this message

> ... but this patch doesn't come close to fixing it. struct CreateTrigStmt
> needs changes. I kinda think the restriction to 4 (or whatever)
> elements ought to go away altogether.

Thanks. I'll leave the [5] restriction call to someone else, seems it
does no harm to me though (not as if we'd change it that often anyway).
Revised patch below. I looked through other places that might be affected,
but did not see anything else except ecpg/preproc/preproc.y, which
looks as though it's already been changed to handle four events.

Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.664
diff -c -r2.664 gram.y
*** src/backend/parser/gram.y 27 May 2009 20:42:29 -0000 2.664
--- src/backend/parser/gram.y 18 Jun 2009 00:44:15 -0000
***************
*** 3133,3139 ****
n->args = $13;
n->before = $4;
n->row = $8;
! memcpy(n->actions, $5, 4);
n->isconstraint = FALSE;
n->deferrable = FALSE;
n->initdeferred = FALSE;
--- 3133,3139 ----
n->args = $13;
n->before = $4;
n->row = $8;
! memcpy(n->actions, $5, 5);
n->isconstraint = FALSE;
n->deferrable = FALSE;
n->initdeferred = FALSE;
***************
*** 3153,3159 ****
n->args = $18;
n->before = FALSE;
n->row = TRUE;
! memcpy(n->actions, $6, 4);
n->isconstraint = TRUE;
n->deferrable = ($10 & 1) != 0;
n->initdeferred = ($10 & 2) != 0;
--- 3153,3159 ----
n->args = $18;
n->before = FALSE;
n->row = TRUE;
! memcpy(n->actions, $6, 5);
n->isconstraint = TRUE;
n->deferrable = ($10 & 1) != 0;
n->initdeferred = ($10 & 2) != 0;
***************
*** 3171,3192 ****
TriggerEvents:
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;
}
;

TriggerOneEvent:
--- 3171,3198 ----
TriggerEvents:
TriggerOneEvent
{
! char *e = palloc(5);
e[0] = $1; e[1] = '\0';
$$ = e;
}
| TriggerOneEvent OR TriggerOneEvent
{
! char *e = palloc(5);
e[0] = $1; e[1] = $3; e[2] = '\0';
$$ = e;
}
| TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
{
! char *e = palloc(5);
e[0] = $1; e[1] = $3; e[2] = $5; e[3] = '\0';
$$ = e;
}
+ | TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
+ {
+ char *e = palloc(5);
+ e[0] = $1; e[1] = $3; e[2] = $5; e[3] = $7; e[4] = '\0';
+ $$ = e;
+ }
;

TriggerOneEvent:
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.394
diff -c -r1.394 parsenodes.h
*** src/include/nodes/parsenodes.h 11 Jun 2009 14:49:11 -0000 1.394
--- src/include/nodes/parsenodes.h 18 Jun 2009 00:44:15 -0000
***************
*** 1551,1557 ****
List *args; /* list of (T_String) Values or NIL */
bool before; /* BEFORE/AFTER */
bool row; /* ROW/STATEMENT */
! char actions[4]; /* 1 to 3 of 'i', 'u', 'd', + trailing \0 */

/* The following are used for referential */
/* integrity constraint triggers */
--- 1551,1557 ----
List *args; /* list of (T_String) Values or NIL */
bool before; /* BEFORE/AFTER */
bool row; /* ROW/STATEMENT */
! char actions[5]; /* 1 to 4 of 'i', 'u', 'd', or 't', + trailing \0 */

/* The following are used for referential */
/* integrity constraint triggers */

--
Greg Sabino Mullane greg(at)turnstep(dot)com
End Point Corporation
PGP Key: 0x14964AC8 200906172045
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8

-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAko5jioACgkQvJuQZxSWSsgqBACfVMeTyQkT9wqJTPi9oTLHuipK
8sgAn0vowAiCNhnoYBnsZT310UFC1UV7
=LpeM
-----END PGP SIGNATURE-----

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2009-06-18 01:29:59 Re: [HACKERS] Cannot use all four trigger events at once
Previous Message Tom Lane 2009-06-17 22:50:30 Re: [HACKERS] Cannot use all four trigger events at once

Browse pgsql-hackers by date

  From Date Subject
Next Message Itagaki Takahiro 2009-06-18 00:57:19 Re: Determining client_encoding from client locale
Previous Message Tom Lane 2009-06-17 23:03:26 Re: Named transaction