#ifndef EXPLAIN_STATE_H
#define EXPLAIN_STATE_H
#include "nodes/parsenodes.h"
#include "nodes/plannodes.h"
#include "parser/parse_node.h"
typedef enum ExplainSerializeOption
{
EXPLAIN_SERIALIZE_NONE,
EXPLAIN_SERIALIZE_TEXT,
EXPLAIN_SERIALIZE_BINARY,
} ExplainSerializeOption;
typedef enum ExplainFormat
{
EXPLAIN_FORMAT_TEXT,
EXPLAIN_FORMAT_XML,
EXPLAIN_FORMAT_JSON,
EXPLAIN_FORMAT_YAML,
} ExplainFormat;
typedef struct ExplainWorkersState
{
int num_workers;
bool *worker_inited;
StringInfoData *worker_str;
int *worker_state_save;
StringInfo prev_str;
} ExplainWorkersState;
typedef struct ExplainState
{
StringInfo str;
bool verbose;
bool analyze;
bool costs;
bool buffers;
bool wal;
bool timing;
bool summary;
bool memory;
bool settings;
bool generic;
ExplainSerializeOption serialize;
ExplainFormat format;
int indent;
List *grouping_stack;
PlannedStmt *pstmt;
List *rtable;
List *rtable_names;
List *deparse_cxt;
Bitmapset *printed_subplans;
bool hide_workers;
int rtable_size;
ExplainWorkersState *workers_state;
void **extension_state;
int extension_state_allocated;
} ExplainState;
typedef void (*ExplainOptionHandler) (ExplainState *, DefElem *, ParseState *);
typedef void (*explain_validate_options_hook_type) (struct ExplainState *es, List *options,
ParseState *pstate);
extern PGDLLIMPORT explain_validate_options_hook_type explain_validate_options_hook;
extern ExplainState *NewExplainState(void);
extern void ParseExplainOptionList(ExplainState *es, List *options,
ParseState *pstate);
extern int GetExplainExtensionId(const char *extension_name);
extern void *GetExplainExtensionState(ExplainState *es, int extension_id);
extern void SetExplainExtensionState(ExplainState *es, int extension_id,
void *opaque);
extern void RegisterExtensionExplainOption(const char *option_name,
ExplainOptionHandler handler);
extern bool ApplyExtensionExplainOption(ExplainState *es, DefElem *opt,
ParseState *pstate);
#endif