mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Some infrastructure changes for the upcoming auto-explain contrib module:
* Refactor explain.c slightly to export a convenient-to-use subroutine for printing EXPLAIN results. * Provide hooks for plugins to get control at ExecutorStart and ExecutorEnd as well as ExecutorRun. * Add some minimal support for tracking the total runtime of ExecutorRun. This code won't actually do anything unless a plugin prods it to. * Change the API of the DefineCustomXXXVariable functions to allow nonzero "flags" to be specified for a custom GUC variable. While at it, also make the "bootstrap" default value for custom GUCs be explicitly specified as a parameter to these functions. This is to eliminate confusion over where the default comes from, as has been expressed in the past by some users of the custom-variable facility. * Refactor GUC code a bit to ensure that a custom variable gets initialized to something valid (like its default value) even if the placeholder value was invalid.
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.152 2008/10/31 21:07:55 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.153 2008/11/19 01:10:23 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -60,12 +60,20 @@
|
||||
((*(expr)->evalfunc) (expr, econtext, isNull, isDone))
|
||||
|
||||
|
||||
/* Hook for plugins to get control in ExecutorStart() */
|
||||
typedef void (*ExecutorStart_hook_type) (QueryDesc *queryDesc, int eflags);
|
||||
extern PGDLLIMPORT ExecutorStart_hook_type ExecutorStart_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecutorRun() */
|
||||
typedef void (*ExecutorRun_hook_type) (QueryDesc *queryDesc,
|
||||
ScanDirection direction,
|
||||
long count);
|
||||
extern PGDLLIMPORT ExecutorRun_hook_type ExecutorRun_hook;
|
||||
|
||||
/* Hook for plugins to get control in ExecutorEnd() */
|
||||
typedef void (*ExecutorEnd_hook_type) (QueryDesc *queryDesc);
|
||||
extern PGDLLIMPORT ExecutorEnd_hook_type ExecutorEnd_hook;
|
||||
|
||||
|
||||
/*
|
||||
* prototypes from functions in execAmi.c
|
||||
@ -140,11 +148,13 @@ extern HeapTuple ExecRemoveJunk(JunkFilter *junkfilter, TupleTableSlot *slot);
|
||||
* prototypes from functions in execMain.c
|
||||
*/
|
||||
extern void ExecutorStart(QueryDesc *queryDesc, int eflags);
|
||||
extern void standard_ExecutorStart(QueryDesc *queryDesc, int eflags);
|
||||
extern void ExecutorRun(QueryDesc *queryDesc,
|
||||
ScanDirection direction, long count);
|
||||
extern void standard_ExecutorRun(QueryDesc *queryDesc,
|
||||
ScanDirection direction, long count);
|
||||
extern void ExecutorEnd(QueryDesc *queryDesc);
|
||||
extern void standard_ExecutorEnd(QueryDesc *queryDesc);
|
||||
extern void ExecutorRewind(QueryDesc *queryDesc);
|
||||
extern void InitResultRelInfo(ResultRelInfo *resultRelInfo,
|
||||
Relation resultRelationDesc,
|
||||
|
Reference in New Issue
Block a user