PostgreSQL Source Code git master
Loading...
Searching...
No Matches
explain_state.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * explain_state.h
4 * prototypes for explain_state.c
5 *
6 * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994-5, Regents of the University of California
8 *
9 * src/include/commands/explain_state.h
10 *
11 *-------------------------------------------------------------------------
12 */
13#ifndef EXPLAIN_STATE_H
14#define EXPLAIN_STATE_H
15
16#include "nodes/parsenodes.h"
17#include "nodes/plannodes.h"
18#include "parser/parse_node.h"
19#include "port/pg_bitutils.h"
20
27
35
36typedef struct ExplainWorkersState
37{
38 int num_workers; /* # of worker processes the plan used */
39 bool *worker_inited; /* per-worker state-initialized flags */
40 StringInfoData *worker_str; /* per-worker transient output buffers */
41 int *worker_state_save; /* per-worker grouping state save areas */
42 StringInfo prev_str; /* saved output buffer while redirecting */
44
45typedef struct ExplainState
46{
47 StringInfo str; /* output buffer */
48 /* options */
49 bool verbose; /* be verbose */
50 bool analyze; /* print actual times */
51 bool costs; /* print estimated costs */
52 bool buffers; /* print buffer usage */
53 bool wal; /* print WAL usage */
54 bool timing; /* print detailed node timing */
55 bool summary; /* print total planning and execution timing */
56 bool memory; /* print planner's memory usage information */
57 bool settings; /* print modified settings */
58 bool io; /* print info about IO (prefetch, ...) */
59 bool generic; /* generate a generic plan */
60 ExplainSerializeOption serialize; /* serialize the query's output? */
61 ExplainFormat format; /* output format */
62 /* state for output formatting --- not reset for each new plan tree */
63 int indent; /* current indentation level */
64 List *grouping_stack; /* format-specific grouping state */
65 /* state related to the current plan tree (filled by ExplainPrintPlan) */
66 PlannedStmt *pstmt; /* top of plan */
67 List *rtable; /* range table */
68 List *rtable_names; /* alias names for RTEs */
69 List *deparse_cxt; /* context list for deparsing expressions */
70 Bitmapset *printed_subplans; /* ids of SubPlans we've printed */
71 bool hide_workers; /* set if we find an invisible Gather */
72 int rtable_size; /* length of rtable excluding the RTE_GROUP
73 * entry */
74 /* state related to the current plan node */
75 ExplainWorkersState *workers_state; /* needed if parallel plan */
76 /* extensions */
80
82typedef bool (*ExplainOptionGUCCheckHandler) (const char *option_name,
83 const char *option_value,
85
86/* Hook to perform additional EXPLAIN options validation */
88 ParseState *pstate);
90
91extern ExplainState *NewExplainState(void);
93 ParseState *pstate);
94
95extern int GetExplainExtensionId(const char *extension_name);
98 void *opaque);
99
100extern void RegisterExtensionExplainOption(const char *option_name,
101 ExplainOptionHandler handler,
102 ExplainOptionGUCCheckHandler guc_check_handler);
104 ParseState *pstate);
105extern bool GUCCheckExplainExtensionOption(const char *option_name,
106 const char *option_value,
108
109extern bool GUCCheckBooleanExplainOption(const char *option_name,
110 const char *option_value,
112
113#endif /* EXPLAIN_STATE_H */
#define PGDLLIMPORT
Definition c.h:1421
ExplainSerializeOption
@ EXPLAIN_SERIALIZE_TEXT
@ EXPLAIN_SERIALIZE_NONE
@ EXPLAIN_SERIALIZE_BINARY
ExplainState * NewExplainState(void)
void(* ExplainOptionHandler)(ExplainState *, DefElem *, ParseState *)
bool GUCCheckExplainExtensionOption(const char *option_name, const char *option_value, NodeTag option_type)
int GetExplainExtensionId(const char *extension_name)
void * GetExplainExtensionState(ExplainState *es, int extension_id)
void SetExplainExtensionState(ExplainState *es, int extension_id, void *opaque)
void RegisterExtensionExplainOption(const char *option_name, ExplainOptionHandler handler, ExplainOptionGUCCheckHandler guc_check_handler)
ExplainFormat
@ EXPLAIN_FORMAT_XML
@ EXPLAIN_FORMAT_YAML
@ EXPLAIN_FORMAT_TEXT
@ EXPLAIN_FORMAT_JSON
void(* explain_validate_options_hook_type)(ExplainState *es, List *options, ParseState *pstate)
PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook
bool GUCCheckBooleanExplainOption(const char *option_name, const char *option_value, NodeTag option_type)
void ParseExplainOptionList(ExplainState *es, List *options, ParseState *pstate)
bool(* ExplainOptionGUCCheckHandler)(const char *option_name, const char *option_value, NodeTag option_type)
bool ApplyExtensionExplainOption(ExplainState *es, DefElem *opt, ParseState *pstate)
NodeTag
Definition nodes.h:27
static int fb(int x)
static enum slash_option_type option_type
int extension_state_allocated
Bitmapset * printed_subplans
List * grouping_stack
List * rtable_names
ExplainWorkersState * workers_state
StringInfo str
void ** extension_state
ExplainFormat format
PlannedStmt * pstmt
ExplainSerializeOption serialize
List * deparse_cxt
StringInfoData * worker_str
Definition pg_list.h:54