diff options
author | Bruce Momjian | 2009-12-01 01:08:46 +0000 |
---|---|---|
committer | Bruce Momjian | 2009-12-01 01:08:46 +0000 |
commit | d85cb27293a2bafb2f6f8c5d965cc8af33c4bf48 (patch) | |
tree | 343d9cc178498237682fb233d14265d535f00c14 /src/backend | |
parent | 29fd97d98283be781ceaf6cbf29db6768ef09a37 (diff) |
ProcessUtility_hook:
Add ProcessUtility_hook() to handle all DDL to contrib/pg_stat_statements.
Itagaki Takahiro
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/tcop/utility.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 42071bfb6c1..67333b1796a 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.318 2009/11/20 20:38:11 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.319 2009/12/01 01:08:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -58,6 +58,9 @@ #include "utils/syscache.h" +/* Hooks for plugins to get control in ProcessUtility() */ +ProcessUtility_hook_type ProcessUtility_hook = NULL; + /* * Verify user has ownership of specified relation, else ereport. * @@ -244,6 +247,10 @@ check_xact_readonly(Node *parsetree) * completionTag is only set nonempty if we want to return a nondefault status. * * completionTag may be NULL if caller doesn't want a status string. + * + * We provide a function hook variable that lets loadable plugins + * get control when ProcessUtility is called. Such a plugin would + * normally call standard_ProcessUtility(). */ void ProcessUtility(Node *parsetree, @@ -260,6 +267,20 @@ ProcessUtility(Node *parsetree, if (completionTag) completionTag[0] = '\0'; + if (ProcessUtility_hook) + (*ProcessUtility_hook) (parsetree, queryString, params, isTopLevel, dest, completionTag); + else + standard_ProcessUtility(parsetree, queryString, params, isTopLevel, dest, completionTag); +} + +void +standard_ProcessUtility(Node *parsetree, + const char *queryString, + ParamListInfo params, + bool isTopLevel, + DestReceiver *dest, + char *completionTag) +{ switch (nodeTag(parsetree)) { /* |