Hi,
On Thursday, March 15, 2012 10:58:49 PM Dimitri Fontaine wrote:
> I tricked that in the grammar, the type is called cmdtrigger but I
> though it wouldn't be a good choice for the SQL statement.
Hm. I am decidedly unhappy with that grammar hackery... But then maybe I am
squeamish.
> + oid | typname | oid | proname
> +------+------------+------+------------
> + 1790 | refcursor | 46 | textin
> + 3838 | cmdtrigger | 2300 | trigger_in
> +(2 rows)
Hm. Wonder if its a good idea to reuse trigger_in. So far we have duplicated
functions for that.
> @@ -482,12 +494,21 @@ ListCommandTriggers(CommandContext cmd)
>
> switch (form->ctgtype)
> {
>
> case CMD_TRIGGER_FIRED_BEFORE:
> - cmd->before = lappend_oid(cmd->before, form->ctgfoid);
> + {
> + if (list_any_triggers)
> + cmd->before_any = lappend_oid(cmd->before_any,
> form->ctgfoid); + else
> + cmd->before = lappend_oid(cmd->before, form->ctgfoid);
>
> break;
>
> -
> ...
> + case CMD_TRIGGER_FIRED_BEFORE:
> + {
> + whenstr = "BEFORE";
> +
> + foreach(cell, cmd->before_any)
> + {
> + Oid proc = lfirst_oid(cell);
> +
> + call_cmdtrigger_procedure(cmd, (RegProcedure)proc,
> whenstr); + }
> + foreach(cell, cmd->before)
> + {
> + Oid proc = lfirst_oid(cell);
> +
> + call_cmdtrigger_procedure(cmd, (RegProcedure)proc,
> whenstr); + }
> + break;
> + }
This will have the effect of calling triggers outside of alphabetic order. I
don't think thats a good idea even if one part is ANY and the other a specific
command.
I don't think there is any reason anymore to separate the two? The only
callsite seems to look like:
632- default:
633: ListCommandTriggers(cmd, true); /* list ANY command triggers */
634: ListCommandTriggers(cmd, false); /* and triggers for this
command tag */
Andres