mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
ProcessUtility_hook:
Add ProcessUtility_hook() to handle all DDL to contrib/pg_stat_statements. Itagaki Takahiro
This commit is contained in:
@ -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))
|
||||
{
|
||||
/*
|
||||
|
@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user