]> granicus.if.org Git - postgresql/blobdiff - src/include/commands/explain.h
Implement an API to let foreign-data wrappers actually be functional.
[postgresql] / src / include / commands / explain.h
index 2460a3e8166307c3e4812578d1c12f83aa424547..2c38c92ae5124469a2c88ee741bc449264fa739f 100644 (file)
@@ -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
  *
  *-------------------------------------------------------------------------
  */
 
 #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 */