1
0
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:
Bruce Momjian
2009-12-01 01:08:46 +00:00
parent 29fd97d982
commit d85cb27293
4 changed files with 135 additions and 11 deletions

View File

@ -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))
{
/*

View File

@ -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);