]> 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 b2581efed037cc499e9ae78415afb5779ec1f083..b88fa02d3b737796797264b6d938bfa709a32b4c 100644 (file)
@@ -1,38 +1,70 @@
 /*-------------------------------------------------------------------------
  *
- * execdesc.h--
- *    plan and query descriptor accessor macros used by the executor
- *    and related modules.
+ * execdesc.h
+ *       plan and query descriptor accessor macros used by the executor
+ *       and related modules.
  *
  *
- * Copyright (c) 1994, Regents of the University of California
+ * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: execdesc.h,v 1.1 1996/08/28 07:22:08 scrappy 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
+ *             query descriptor:
+ *
+ *     a QueryDesc encapsulates everything that the executor
+ *     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 {
-    CmdType            operation; /* CMD_SELECT, CMD_UPDATE, etc. */
-    Query              *parsetree; 
-    Plan               *plantree;
-    CommandDest                dest;  /* the destination output of the execution */
+typedef struct QueryDesc
+{
+       /* These fields are provided by CreateQueryDesc */
+       CmdType         operation;              /* CMD_SELECT, CMD_UPDATE, etc. */
+       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  */