X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=src%2Finclude%2Fcommands%2Fexplain.h;h=2c38c92ae5124469a2c88ee741bc449264fa739f;hb=bb742407947ad1cbf19355d24282380d576e7654;hp=2460a3e8166307c3e4812578d1c12f83aa424547;hpb=f6e8730d11ddfc720eda1dde23794d262ad8cc08;p=postgresql diff --git a/src/include/commands/explain.h b/src/include/commands/explain.h index 2460a3e816..2c38c92ae5 100644 --- a/src/include/commands/explain.h +++ b/src/include/commands/explain.h @@ -3,10 +3,10 @@ * explain.h * prototypes for explain.c * - * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group + * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group * Portions Copyright (c) 1994-5, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/commands/explain.h,v 1.34 2007/11/15 22:25:17 momjian Exp $ + * src/include/commands/explain.h * *------------------------------------------------------------------------- */ @@ -15,12 +15,35 @@ #include "executor/executor.h" +typedef enum ExplainFormat +{ + EXPLAIN_FORMAT_TEXT, + EXPLAIN_FORMAT_XML, + EXPLAIN_FORMAT_JSON, + EXPLAIN_FORMAT_YAML +} ExplainFormat; + +typedef struct ExplainState +{ + StringInfo str; /* output buffer */ + /* options */ + bool verbose; /* be verbose */ + bool analyze; /* print actual times */ + bool costs; /* print costs */ + bool buffers; /* print buffer usage */ + ExplainFormat format; /* output format */ + /* other states */ + PlannedStmt *pstmt; /* top of plan */ + List *rtable; /* range table */ + int indent; /* current indentation level */ + List *grouping_stack; /* format-specific grouping state */ +} ExplainState; + /* Hook for plugins to get control in ExplainOneQuery() */ typedef void (*ExplainOneQuery_hook_type) (Query *query, - ExplainStmt *stmt, + ExplainState *es, const char *queryString, - ParamListInfo params, - TupOutputState *tstate); + ParamListInfo params); extern PGDLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_hook; /* Hook for plugins to get control in explain_get_index_name() */ @@ -31,14 +54,33 @@ extern PGDLLIMPORT explain_get_index_name_hook_type explain_get_index_name_hook; extern void ExplainQuery(ExplainStmt *stmt, const char *queryString, ParamListInfo params, DestReceiver *dest); +extern void ExplainInitState(ExplainState *es); + extern TupleDesc ExplainResultDesc(ExplainStmt *stmt); -extern void ExplainOneUtility(Node *utilityStmt, ExplainStmt *stmt, - const char *queryString, - ParamListInfo params, - TupOutputState *tstate); +extern void ExplainOneUtility(Node *utilityStmt, ExplainState *es, + const char *queryString, ParamListInfo params); + +extern void ExplainOnePlan(PlannedStmt *plannedstmt, ExplainState *es, + const char *queryString, ParamListInfo params); + +extern void ExplainPrintPlan(ExplainState *es, QueryDesc *queryDesc); + +extern void ExplainQueryText(ExplainState *es, QueryDesc *queryDesc); + +extern void ExplainBeginOutput(ExplainState *es); +extern void ExplainEndOutput(ExplainState *es); +extern void ExplainSeparatePlans(ExplainState *es); -extern void ExplainOnePlan(PlannedStmt *plannedstmt, ParamListInfo params, - ExplainStmt *stmt, TupOutputState *tstate); +extern void ExplainPropertyList(const char *qlabel, List *data, + ExplainState *es); +extern void ExplainPropertyText(const char *qlabel, const char *value, + ExplainState *es); +extern void ExplainPropertyInteger(const char *qlabel, int value, + ExplainState *es); +extern void ExplainPropertyLong(const char *qlabel, long value, + ExplainState *es); +extern void ExplainPropertyFloat(const char *qlabel, double value, int ndigits, + ExplainState *es); #endif /* EXPLAIN_H */