diff options
author | Bruce Momjian <bruce@momjian.us> | 2009-12-01 01:08:46 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2009-12-01 01:08:46 +0000 |
commit | d85cb27293a2bafb2f6f8c5d965cc8af33c4bf48 (patch) | |
tree | 343d9cc178498237682fb233d14265d535f00c14 /src | |
parent | 29fd97d98283be781ceaf6cbf29db6768ef09a37 (diff) | |
download | postgresql-d85cb27293a2bafb2f6f8c5d965cc8af33c4bf48.tar.gz postgresql-d85cb27293a2bafb2f6f8c5d965cc8af33c4bf48.zip |
ProcessUtility_hook:
Add ProcessUtility_hook() to handle all DDL to contrib/pg_stat_statements.
Itagaki Takahiro
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/tcop/utility.c | 23 | ||||
-rw-r--r-- | src/include/tcop/utility.h | 11 |
2 files changed, 32 insertions, 2 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)) { /* diff --git a/src/include/tcop/utility.h b/src/include/tcop/utility.h index d609b0ac4e9..ce3ee1fb055 100644 --- a/src/include/tcop/utility.h +++ b/src/include/tcop/utility.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/tcop/utility.h,v 1.35 2009/01/01 17:24:01 momjian Exp $ + * $PostgreSQL: pgsql/src/include/tcop/utility.h,v 1.36 2009/12/01 01:08:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -17,9 +17,18 @@ #include "tcop/tcopprot.h" +/* 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); +extern PGDLLIMPORT ProcessUtility_hook_type ProcessUtility_hook; + extern void ProcessUtility(Node *parsetree, const char *queryString, ParamListInfo params, bool isTopLevel, DestReceiver *dest, char *completionTag); +extern void standard_ProcessUtility(Node *parsetree, const char *queryString, + ParamListInfo params, bool isTopLevel, + DestReceiver *dest, char *completionTag); extern bool UtilityReturnsTuples(Node *parsetree); |