]> 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 8fb2721c437a5fd308c1df078c7f9b599b6d8aaf..2c38c92ae5124469a2c88ee741bc449264fa739f 100644 (file)
@@ -3,10 +3,10 @@
  * explain.h
  *       prototypes for explain.c
  *
- * Portions Copyright (c) 1996-2005, 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.25 2005/11/29 01:25:50 tgl Exp $
+ * src/include/commands/explain.h
  *
  *-------------------------------------------------------------------------
  */
 #define EXPLAIN_H
 
 #include "executor/executor.h"
-#include "nodes/parsenodes.h"
-#include "tcop/dest.h"
 
+typedef enum ExplainFormat
+{
+       EXPLAIN_FORMAT_TEXT,
+       EXPLAIN_FORMAT_XML,
+       EXPLAIN_FORMAT_JSON,
+       EXPLAIN_FORMAT_YAML
+} ExplainFormat;
 
-extern void ExplainQuery(ExplainStmt *stmt, ParamListInfo params,
-                                                DestReceiver *dest);
+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,
+                                                                                                          ExplainState *es,
+                                                                                                        const char *queryString,
+                                                                                                          ParamListInfo params);
+extern PGDLLIMPORT ExplainOneQuery_hook_type ExplainOneQuery_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(ExplainStmt *stmt, const char *queryString,
+                        ParamListInfo params, DestReceiver *dest);
+
+extern void ExplainInitState(ExplainState *es);
 
 extern TupleDesc ExplainResultDesc(ExplainStmt *stmt);
 
-extern void ExplainOnePlan(QueryDesc *queryDesc, ExplainStmt *stmt,
-                          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 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 */