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/tcop | |
| parent | be86e3dd5b42c33387ae976c014e6276c9439f7f (diff) | |
| download | postgresql-3a0e4d36ebd7f477822d5bae41ba121a40d22ccc.tar.gz | |
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/tcop')
| -rw-r--r-- | src/include/tcop/utility.h | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/include/tcop/utility.h b/src/include/tcop/utility.h index 54190b2f6c..fb6b568809 100644 --- a/src/include/tcop/utility.h +++ b/src/include/tcop/utility.h @@ -16,19 +16,27 @@ #include "tcop/tcopprot.h" +typedef enum +{ + PROCESS_UTILITY_TOPLEVEL, /* toplevel interactive command */ + PROCESS_UTILITY_QUERY, /* a complete query, but not toplevel */ + PROCESS_UTILITY_SUBCOMMAND, /* a piece of a query */ + PROCESS_UTILITY_GENERATED /* internally generated node query node */ +} ProcessUtilityContext; /* Hook for plugins to get control in ProcessUtility() */ typedef void (*ProcessUtility_hook_type) (Node *parsetree, - const char *queryString, ParamListInfo params, bool isTopLevel, - DestReceiver *dest, char *completionTag); + const char *queryString, ParamListInfo params, + DestReceiver *dest, char *completionTag, + ProcessUtilityContext context); extern PGDLLIMPORT ProcessUtility_hook_type ProcessUtility_hook; extern void ProcessUtility(Node *parsetree, const char *queryString, - ParamListInfo params, bool isTopLevel, - DestReceiver *dest, char *completionTag); + ParamListInfo params, DestReceiver *dest, char *completionTag, + ProcessUtilityContext context); extern void standard_ProcessUtility(Node *parsetree, const char *queryString, - ParamListInfo params, bool isTopLevel, - DestReceiver *dest, char *completionTag); + ParamListInfo params, DestReceiver *dest, + char *completionTag, ProcessUtilityContext context); extern bool UtilityReturnsTuples(Node *parsetree); |
