]> granicus.if.org Git - postgresql/blobdiff - src/include/executor/execdesc.h
Fix initialization of fake LSN for unlogged relations
[postgresql] / src / include / executor / execdesc.h
index 55bf52ed38ddee324b0c6e7d3b39fda7185661f5..b88fa02d3b737796797264b6d938bfa709a32b4c 100644 (file)
@@ -5,36 +5,66 @@
  *       and related modules.
  *
  *
- * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: execdesc.h,v 1.17 2001/11/05 17:46:33 momjian Exp $
+ * src/include/executor/execdesc.h
  *
  *-------------------------------------------------------------------------
  */
 #ifndef EXECDESC_H
 #define EXECDESC_H
 
-#include "nodes/parsenodes.h"
-#include "nodes/plannodes.h"
+#include "nodes/execnodes.h"
 #include "tcop/dest.h"
 
+
 /* ----------------
  *             query descriptor:
+ *
  *     a QueryDesc encapsulates everything that the executor
- *     needs to execute the query
+ *     needs to execute the query.
+ *
+ *     For the convenience of SQL-language functions, we also support QueryDescs
+ *     containing utility statements; these must not be passed to the executor
+ *     however.
  * ---------------------
  */
 typedef struct QueryDesc
 {
+       /* These fields are provided by CreateQueryDesc */
        CmdType         operation;              /* CMD_SELECT, CMD_UPDATE, etc. */
-       Query      *parsetree;
-       Plan       *plantree;
-       CommandDest dest;                       /* the destination output of the execution */
+       PlannedStmt *plannedstmt;       /* planner's output (could be utility, too) */
+       const char *sourceText;         /* source text of the query */
+       Snapshot        snapshot;               /* snapshot to use for query */
+       Snapshot        crosscheck_snapshot;    /* crosscheck for RI update/delete */
+       DestReceiver *dest;                     /* the destination for tuple output */
+       ParamListInfo params;           /* param values being passed in */
+       QueryEnvironment *queryEnv; /* query environment passed in */
+       int                     instrument_options; /* OR of InstrumentOption flags */
+
+       /* These fields are set by ExecutorStart */
+       TupleDesc       tupDesc;                /* descriptor for result tuples */
+       EState     *estate;                     /* executor's query-wide state */
+       PlanState  *planstate;          /* tree of per-plan-node state */
+
+       /* This field is set by ExecutorRun */
+       bool            already_executed;       /* true if previously executed */
+
+       /* This is always set NULL by the core system, but plugins can change it */
+       struct Instrumentation *totaltime;      /* total time spent in ExecutorRun */
 } QueryDesc;
 
 /* in pquery.c */
-extern QueryDesc *CreateQueryDesc(Query *parsetree, Plan *plantree,
-                               CommandDest dest);
+extern QueryDesc *CreateQueryDesc(PlannedStmt *plannedstmt,
+                                                                 const char *sourceText,
+                                                                 Snapshot snapshot,
+                                                                 Snapshot crosscheck_snapshot,
+                                                                 DestReceiver *dest,
+                                                                 ParamListInfo params,
+                                                                 QueryEnvironment *queryEnv,
+                                                                 int instrument_options);
+
+extern void FreeQueryDesc(QueryDesc *qdesc);
 
-#endif   /* EXECDESC_H  */
+#endif                                                 /* EXECDESC_H  */