]> 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 69b2268920c9cc59717b63cfa6e3daf65cbbf0bf..2c38c92ae5124469a2c88ee741bc449264fa739f 100644 (file)
@@ -3,10 +3,10 @@
  * explain.h
  *       prototypes for explain.c
  *
- * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
- * $Id: explain.h,v 1.19 2003/05/06 20:26:27 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, 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 */