80 bool timing_set =
false;
81 bool buffers_set =
false;
82 bool summary_set =
false;
89 if (strcmp(opt->
defname,
"analyze") == 0)
91 else if (strcmp(opt->
defname,
"verbose") == 0)
93 else if (strcmp(opt->
defname,
"costs") == 0)
95 else if (strcmp(opt->
defname,
"buffers") == 0)
100 else if (strcmp(opt->
defname,
"wal") == 0)
102 else if (strcmp(opt->
defname,
"settings") == 0)
104 else if (strcmp(opt->
defname,
"generic_plan") == 0)
106 else if (strcmp(opt->
defname,
"timing") == 0)
111 else if (strcmp(opt->
defname,
"summary") == 0)
116 else if (strcmp(opt->
defname,
"memory") == 0)
118 else if (strcmp(opt->
defname,
"serialize") == 0)
124 if (strcmp(p,
"off") == 0 || strcmp(p,
"none") == 0)
126 else if (strcmp(p,
"text") == 0)
128 else if (strcmp(p,
"binary") == 0)
132 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
133 errmsg(
"unrecognized value for EXPLAIN option \"%s\": \"%s\"",
143 else if (strcmp(opt->
defname,
"format") == 0)
147 if (strcmp(p,
"text") == 0)
149 else if (strcmp(p,
"xml") == 0)
151 else if (strcmp(p,
"json") == 0)
153 else if (strcmp(p,
"yaml") == 0)
157 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
158 errmsg(
"unrecognized value for EXPLAIN option \"%s\": \"%s\"",
164 (
errcode(ERRCODE_SYNTAX_ERROR),
165 errmsg(
"unrecognized EXPLAIN option \"%s\"",
173 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
174 errmsg(
"EXPLAIN option %s requires ANALYZE",
"WAL")));
185 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
186 errmsg(
"EXPLAIN option %s requires ANALYZE",
"TIMING")));
191 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
192 errmsg(
"EXPLAIN option %s requires ANALYZE",
"SERIALIZE")));
197 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
198 errmsg(
"EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together")));
205 (*explain_validate_options_hook) (es,
options, pstate);
260 Assert(extension_id >= 0);
279 Assert(extension_id >= 0);
char * defGetString(DefElem *def)
bool defGetBoolean(DefElem *def)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
static ExplainExtensionOption * ExplainExtensionOptionArray
ExplainState * NewExplainState(void)
static const char ** ExplainExtensionNameArray
static int ExplainExtensionNamesAssigned
int GetExplainExtensionId(const char *extension_name)
void * GetExplainExtensionState(ExplainState *es, int extension_id)
static int ExplainExtensionNamesAllocated
void SetExplainExtensionState(ExplainState *es, int extension_id, void *opaque)
void RegisterExtensionExplainOption(const char *option_name, ExplainOptionHandler handler)
static int ExplainExtensionOptionsAllocated
explain_validate_options_hook_type explain_validate_options_hook
void ParseExplainOptionList(ExplainState *es, List *options, ParseState *pstate)
bool ApplyExtensionExplainOption(ExplainState *es, DefElem *opt, ParseState *pstate)
static int ExplainExtensionOptionsAssigned
@ EXPLAIN_SERIALIZE_BINARY
void(* ExplainOptionHandler)(ExplainState *, DefElem *, ParseState *)
void(* explain_validate_options_hook_type)(struct ExplainState *es, List *options, ParseState *pstate)
Assert(PointerIsAligned(start, uint64))
if(TABLE==NULL||TABLE_index==NULL)
void * repalloc0(void *pointer, Size oldsize, Size size)
void * MemoryContextAlloc(MemoryContext context, Size size)
void * repalloc(void *pointer, Size size)
void * palloc0(Size size)
MemoryContext TopMemoryContext
int parser_errposition(ParseState *pstate, int location)
static uint32 pg_nextpower2_32(uint32 num)
StringInfo makeStringInfo(void)
ExplainOptionHandler option_handler
int extension_state_allocated
ExplainSerializeOption serialize