PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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-2025, 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
21{
26
27typedef enum ExplainFormat
28{
34
35typedef struct ExplainWorkersState
36{
37 int num_workers; /* # of worker processes the plan used */
38 bool *worker_inited; /* per-worker state-initialized flags */
39 StringInfoData *worker_str; /* per-worker transient output buffers */
40 int *worker_state_save; /* per-worker grouping state save areas */
41 StringInfo prev_str; /* saved output buffer while redirecting */
43
44typedef struct ExplainState
45{
46 StringInfo str; /* output buffer */
47 /* options */
48 bool verbose; /* be verbose */
49 bool analyze; /* print actual times */
50 bool costs; /* print estimated costs */
51 bool buffers; /* print buffer usage */
52 bool wal; /* print WAL usage */
53 bool timing; /* print detailed node timing */
54 bool summary; /* print total planning and execution timing */
55 bool memory; /* print planner's memory usage information */
56 bool settings; /* print modified settings */
57 bool generic; /* generate a generic plan */
58 ExplainSerializeOption serialize; /* serialize the query's output? */
59 ExplainFormat format; /* output format */
60 /* state for output formatting --- not reset for each new plan tree */
61 int indent; /* current indentation level */
62 List *grouping_stack; /* format-specific grouping state */
63 /* state related to the current plan tree (filled by ExplainPrintPlan) */
64 PlannedStmt *pstmt; /* top of plan */
65 List *rtable; /* range table */
66 List *rtable_names; /* alias names for RTEs */
67 List *deparse_cxt; /* context list for deparsing expressions */
68 Bitmapset *printed_subplans; /* ids of SubPlans we've printed */
69 bool hide_workers; /* set if we find an invisible Gather */
70 int rtable_size; /* length of rtable excluding the RTE_GROUP
71 * entry */
72 /* state related to the current plan node */
73 ExplainWorkersState *workers_state; /* needed if parallel plan */
74 /* extensions */
78
80
81/* Hook to perform additional EXPLAIN options validation */
83 ParseState *pstate);
85
86extern ExplainState *NewExplainState(void);
88 ParseState *pstate);
89
90extern int GetExplainExtensionId(const char *extension_name);
91extern void *GetExplainExtensionState(ExplainState *es, int extension_id);
92extern void SetExplainExtensionState(ExplainState *es, int extension_id,
93 void *opaque);
94
95extern void RegisterExtensionExplainOption(const char *option_name,
96 ExplainOptionHandler handler);
98 ParseState *pstate);
99
100#endif /* EXPLAIN_STATE_H */
#define PGDLLIMPORT
Definition: c.h:1291
ExplainSerializeOption
Definition: explain_state.h:21
@ EXPLAIN_SERIALIZE_TEXT
Definition: explain_state.h:23
@ EXPLAIN_SERIALIZE_NONE
Definition: explain_state.h:22
@ EXPLAIN_SERIALIZE_BINARY
Definition: explain_state.h:24
ExplainState * NewExplainState(void)
Definition: explain_state.c:61
void(* ExplainOptionHandler)(ExplainState *, DefElem *, ParseState *)
Definition: explain_state.h:79
int GetExplainExtensionId(const char *extension_name)
void * GetExplainExtensionState(ExplainState *es, int extension_id)
void(* explain_validate_options_hook_type)(struct ExplainState *es, List *options, ParseState *pstate)
Definition: explain_state.h:82
void SetExplainExtensionState(ExplainState *es, int extension_id, void *opaque)
void RegisterExtensionExplainOption(const char *option_name, ExplainOptionHandler handler)
struct ExplainWorkersState ExplainWorkersState
ExplainFormat
Definition: explain_state.h:28
@ EXPLAIN_FORMAT_XML
Definition: explain_state.h:30
@ EXPLAIN_FORMAT_YAML
Definition: explain_state.h:32
@ EXPLAIN_FORMAT_TEXT
Definition: explain_state.h:29
@ EXPLAIN_FORMAT_JSON
Definition: explain_state.h:31
PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook
Definition: explain_state.c:41
struct ExplainState ExplainState
void ParseExplainOptionList(ExplainState *es, List *options, ParseState *pstate)
Definition: explain_state.c:77
bool ApplyExtensionExplainOption(ExplainState *es, DefElem *opt, ParseState *pstate)
static char ** options
int extension_state_allocated
Definition: explain_state.h:76
Bitmapset * printed_subplans
Definition: explain_state.h:68
List * grouping_stack
Definition: explain_state.h:62
List * rtable_names
Definition: explain_state.h:66
ExplainWorkersState * workers_state
Definition: explain_state.h:73
StringInfo str
Definition: explain_state.h:46
void ** extension_state
Definition: explain_state.h:75
ExplainFormat format
Definition: explain_state.h:59
PlannedStmt * pstmt
Definition: explain_state.h:64
ExplainSerializeOption serialize
Definition: explain_state.h:58
List * deparse_cxt
Definition: explain_state.h:67
StringInfoData * worker_str
Definition: explain_state.h:39
Definition: pg_list.h:54