]> 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 9c54ed1d6439984a7510751d91a0908aa6cee318..b88fa02d3b737796797264b6d938bfa709a32b4c 100644 (file)
@@ -5,17 +5,16 @@
  *       and related modules.
  *
  *
- * Portions Copyright (c) 1996-2002, 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.23 2003/05/06 20:26:28 tgl Exp $
+ * src/include/executor/execdesc.h
  *
  *-------------------------------------------------------------------------
  */
 #ifndef EXECDESC_H
 #define EXECDESC_H
 
-#include "nodes/parsenodes.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;          /* rewritten parsetree */
-       Plan       *plantree;           /* planner's output */
+       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 */
-       const char *portalName;         /* name of portal, or NULL */
        ParamListInfo params;           /* param values being passed in */
-       bool            doInstrument;   /* TRUE requests runtime instrumentation */
+       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,
-                                                                 DestReceiver *dest, const char *portalName,
+extern QueryDesc *CreateQueryDesc(PlannedStmt *plannedstmt,
+                                                                 const char *sourceText,
+                                                                 Snapshot snapshot,
+                                                                 Snapshot crosscheck_snapshot,
+                                                                 DestReceiver *dest,
                                                                  ParamListInfo params,
-                                                                 bool doInstrument);
+                                                                 QueryEnvironment *queryEnv,
+                                                                 int instrument_options);
 
 extern void FreeQueryDesc(QueryDesc *qdesc);
 
-#endif   /* EXECDESC_H  */
+#endif                                                 /* EXECDESC_H  */