diff options
author | Robert Haas <rhaas@postgresql.org> | 2012-07-20 11:38:47 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2012-07-20 11:39:01 -0400 |
commit | 3a0e4d36ebd7f477822d5bae41ba121a40d22ccc (patch) | |
tree | 323cd89ebb88c51b796b86f17f6efa1db76a761e /src/include/commands | |
parent | be86e3dd5b42c33387ae976c014e6276c9439f7f (diff) | |
download | postgresql-3a0e4d36ebd7f477822d5bae41ba121a40d22ccc.tar.gz postgresql-3a0e4d36ebd7f477822d5bae41ba121a40d22ccc.zip |
Make new event trigger facility actually do something.
Commit 3855968f328918b6cd1401dd11d109d471a54d40 added syntax, pg_dump,
psql support, and documentation, but the triggers didn't actually fire.
With this commit, they now do. This is still a pretty basic facility
overall because event triggers do not get a whole lot of information
about what the user is trying to do unless you write them in C; and
there's still no option to fire them anywhere except at the very
beginning of the execution sequence, but it's better than nothing,
and a good building block for future work.
Along the way, add a regression test for ALTER LARGE OBJECT, since
testing of event triggers reveals that we haven't got one.
Dimitri Fontaine and Robert Haas
Diffstat (limited to 'src/include/commands')
-rw-r--r-- | src/include/commands/event_trigger.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/include/commands/event_trigger.h b/src/include/commands/event_trigger.h index 3ebb374939a..459d27fbbef 100644 --- a/src/include/commands/event_trigger.h +++ b/src/include/commands/event_trigger.h @@ -16,6 +16,21 @@ #include "catalog/pg_event_trigger.h" #include "nodes/parsenodes.h" +typedef struct EventTriggerData +{ + NodeTag type; + char *event; /* event name */ + Node *parsetree; /* parse tree */ + const char *tag; /* command tag */ +} EventTriggerData; + +/* + * EventTriggerData is the node type that is passed as fmgr "context" info + * when a function is called by the event trigger manager. + */ +#define CALLED_AS_EVENT_TRIGGER(fcinfo) \ + ((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData)) + extern void CreateEventTrigger(CreateEventTrigStmt *stmt); extern void RemoveEventTriggerById(Oid ctrigOid); extern Oid get_event_trigger_oid(const char *trigname, bool missing_ok); @@ -25,4 +40,7 @@ extern void RenameEventTrigger(const char* trigname, const char *newname); extern void AlterEventTriggerOwner(const char *name, Oid newOwnerId); extern void AlterEventTriggerOwner_oid(Oid, Oid newOwnerId); +extern bool EventTriggerSupportsObjectType(ObjectType obtype); +extern void EventTriggerDDLCommandStart(Node *parsetree); + #endif /* EVENT_TRIGGER_H */ |