mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Make new event trigger facility actually do something.
Commit 3855968f32
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
This commit is contained in:
@ -240,8 +240,9 @@ static void pgss_ExecutorRun(QueryDesc *queryDesc,
|
||||
static void pgss_ExecutorFinish(QueryDesc *queryDesc);
|
||||
static void pgss_ExecutorEnd(QueryDesc *queryDesc);
|
||||
static void pgss_ProcessUtility(Node *parsetree,
|
||||
const char *queryString, ParamListInfo params, bool isTopLevel,
|
||||
DestReceiver *dest, char *completionTag);
|
||||
const char *queryString, ParamListInfo params,
|
||||
DestReceiver *dest, char *completionTag,
|
||||
ProcessUtilityContext context);
|
||||
static uint32 pgss_hash_fn(const void *key, Size keysize);
|
||||
static int pgss_match_fn(const void *key1, const void *key2, Size keysize);
|
||||
static uint32 pgss_hash_string(const char *str);
|
||||
@ -785,8 +786,8 @@ pgss_ExecutorEnd(QueryDesc *queryDesc)
|
||||
*/
|
||||
static void
|
||||
pgss_ProcessUtility(Node *parsetree, const char *queryString,
|
||||
ParamListInfo params, bool isTopLevel,
|
||||
DestReceiver *dest, char *completionTag)
|
||||
ParamListInfo params, DestReceiver *dest,
|
||||
char *completionTag, ProcessUtilityContext context)
|
||||
{
|
||||
/*
|
||||
* If it's an EXECUTE statement, we don't track it and don't increment the
|
||||
@ -819,10 +820,10 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
|
||||
{
|
||||
if (prev_ProcessUtility)
|
||||
prev_ProcessUtility(parsetree, queryString, params,
|
||||
isTopLevel, dest, completionTag);
|
||||
dest, completionTag, context);
|
||||
else
|
||||
standard_ProcessUtility(parsetree, queryString, params,
|
||||
isTopLevel, dest, completionTag);
|
||||
dest, completionTag, context);
|
||||
nested_level--;
|
||||
}
|
||||
PG_CATCH();
|
||||
@ -880,10 +881,10 @@ pgss_ProcessUtility(Node *parsetree, const char *queryString,
|
||||
{
|
||||
if (prev_ProcessUtility)
|
||||
prev_ProcessUtility(parsetree, queryString, params,
|
||||
isTopLevel, dest, completionTag);
|
||||
dest, completionTag, context);
|
||||
else
|
||||
standard_ProcessUtility(parsetree, queryString, params,
|
||||
isTopLevel, dest, completionTag);
|
||||
dest, completionTag, context);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user