/*------------------------------------------------------------------------- * * explain.h * prototypes for explain.c * * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group * Portions Copyright (c) 1994-5, Regents of the University of California * * src/include/commands/explain.h * *------------------------------------------------------------------------- */ #ifndef EXPLAIN_H #define EXPLAIN_H #include "executor/executor.h" #include "parser/parse_node.h" struct ExplainState; /* defined in explain_state.h */ /* Hook for plugins to get control in ExplainOneQuery() */ typedef void (*ExplainOneQuery_hook_type) (Query *query, int cursorOptions, IntoClause *into, struct ExplainState *es, const char *queryString, ParamListInfo params, QueryEnvironment *queryEnv); extern PGDLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_hook; /* Hook for EXPLAIN plugins to print extra information for each plan */ typedef void (*explain_per_plan_hook_type) (PlannedStmt *plannedstmt, IntoClause *into, struct ExplainState *es, const char *queryString, ParamListInfo params, QueryEnvironment *queryEnv); extern PGDLLIMPORT explain_per_plan_hook_type explain_per_plan_hook; /* Hook for EXPLAIN plugins to print extra fields on individual plan nodes */ typedef void (*explain_per_node_hook_type) (PlanState *planstate, List *ancestors, const char *relationship, const char *plan_name, struct ExplainState *es); extern PGDLLIMPORT explain_per_node_hook_type explain_per_node_hook; /* Hook for plugins to get control in explain_get_index_name() */ typedef const char *(*explain_get_index_name_hook_type) (Oid indexId); extern PGDLLIMPORT explain_get_index_name_hook_type explain_get_index_name_hook; extern void ExplainQuery(ParseState *pstate, ExplainStmt *stmt, ParamListInfo params, DestReceiver *dest); extern void standard_ExplainOneQuery(Query *query, int cursorOptions, IntoClause *into, struct ExplainState *es, const char *queryString, ParamListInfo params, QueryEnvironment *queryEnv); extern TupleDesc ExplainResultDesc(ExplainStmt *stmt); extern void ExplainOneUtility(Node *utilityStmt, IntoClause *into, struct ExplainState *es, ParseState *pstate, ParamListInfo params); extern void ExplainOnePlan(PlannedStmt *plannedstmt, CachedPlan *cplan, CachedPlanSource *plansource, int query_index, IntoClause *into, struct ExplainState *es, const char *queryString, ParamListInfo params, QueryEnvironment *queryEnv, const instr_time *planduration, const BufferUsage *bufusage, const MemoryContextCounters *mem_counters); extern void ExplainPrintPlan(struct ExplainState *es, QueryDesc *queryDesc); extern void ExplainPrintTriggers(struct ExplainState *es, QueryDesc *queryDesc); extern void ExplainPrintJITSummary(struct ExplainState *es, QueryDesc *queryDesc); extern void ExplainQueryText(struct ExplainState *es, QueryDesc *queryDesc); extern void ExplainQueryParameters(struct ExplainState *es, ParamListInfo params, int maxlen); #endif /* EXPLAIN_H */