]> granicus.if.org Git - postgresql/blob - src/include/executor/execdesc.h
Fix initialization of fake LSN for unlogged relations
[postgresql] / src / include / executor / execdesc.h
1 /*-------------------------------------------------------------------------
2  *
3  * execdesc.h
4  *        plan and query descriptor accessor macros used by the executor
5  *        and related modules.
6  *
7  *
8  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * src/include/executor/execdesc.h
12  *
13  *-------------------------------------------------------------------------
14  */
15 #ifndef EXECDESC_H
16 #define EXECDESC_H
17
18 #include "nodes/execnodes.h"
19 #include "tcop/dest.h"
20
21
22 /* ----------------
23  *              query descriptor:
24  *
25  *      a QueryDesc encapsulates everything that the executor
26  *      needs to execute the query.
27  *
28  *      For the convenience of SQL-language functions, we also support QueryDescs
29  *      containing utility statements; these must not be passed to the executor
30  *      however.
31  * ---------------------
32  */
33 typedef struct QueryDesc
34 {
35         /* These fields are provided by CreateQueryDesc */
36         CmdType         operation;              /* CMD_SELECT, CMD_UPDATE, etc. */
37         PlannedStmt *plannedstmt;       /* planner's output (could be utility, too) */
38         const char *sourceText;         /* source text of the query */
39         Snapshot        snapshot;               /* snapshot to use for query */
40         Snapshot        crosscheck_snapshot;    /* crosscheck for RI update/delete */
41         DestReceiver *dest;                     /* the destination for tuple output */
42         ParamListInfo params;           /* param values being passed in */
43         QueryEnvironment *queryEnv; /* query environment passed in */
44         int                     instrument_options; /* OR of InstrumentOption flags */
45
46         /* These fields are set by ExecutorStart */
47         TupleDesc       tupDesc;                /* descriptor for result tuples */
48         EState     *estate;                     /* executor's query-wide state */
49         PlanState  *planstate;          /* tree of per-plan-node state */
50
51         /* This field is set by ExecutorRun */
52         bool            already_executed;       /* true if previously executed */
53
54         /* This is always set NULL by the core system, but plugins can change it */
55         struct Instrumentation *totaltime;      /* total time spent in ExecutorRun */
56 } QueryDesc;
57
58 /* in pquery.c */
59 extern QueryDesc *CreateQueryDesc(PlannedStmt *plannedstmt,
60                                                                   const char *sourceText,
61                                                                   Snapshot snapshot,
62                                                                   Snapshot crosscheck_snapshot,
63                                                                   DestReceiver *dest,
64                                                                   ParamListInfo params,
65                                                                   QueryEnvironment *queryEnv,
66                                                                   int instrument_options);
67
68 extern void FreeQueryDesc(QueryDesc *qdesc);
69
70 #endif                                                  /* EXECDESC_H  */