mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-06 10:27:31 +08:00
walsender.h should depend on xlog.h, not vice versa. (Actually, the inclusion was circular until a couple hours ago, which was even sillier; but Bruce broke it in the expedient rather than logically correct direction.) Because of that poor decision, plus blind application of pgrminclude, we had a situation where half the system was depending on xlog.h to include such unrelated stuff as array.h and guc.h. Clean up the header inclusion, and manually revert a lot of what pgrminclude had done so things build again. This episode reinforces my feeling that pgrminclude should not be run without adult supervision. Inclusion changes in header files in particular need to be reviewed with great care. More generally, it'd be good if we had a clearer notion of module layering to dictate which headers can sanely include which others ... but that's a big task for another day.
73 lines
2.3 KiB
C
73 lines
2.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* execdesc.h
|
|
* plan and query descriptor accessor macros used by the executor
|
|
* and related modules.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/executor/execdesc.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef EXECDESC_H
|
|
#define EXECDESC_H
|
|
|
|
#include "nodes/execnodes.h"
|
|
#include "tcop/dest.h"
|
|
|
|
|
|
/* ----------------
|
|
* 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
|
|
{
|
|
/* These fields are provided by CreateQueryDesc */
|
|
CmdType operation; /* CMD_SELECT, CMD_UPDATE, etc. */
|
|
PlannedStmt *plannedstmt; /* planner's output, or null if utility */
|
|
Node *utilitystmt; /* utility statement, or null */
|
|
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 */
|
|
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 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(PlannedStmt *plannedstmt,
|
|
const char *sourceText,
|
|
Snapshot snapshot,
|
|
Snapshot crosscheck_snapshot,
|
|
DestReceiver *dest,
|
|
ParamListInfo params,
|
|
int instrument_options);
|
|
|
|
extern QueryDesc *CreateUtilityQueryDesc(Node *utilitystmt,
|
|
const char *sourceText,
|
|
Snapshot snapshot,
|
|
DestReceiver *dest,
|
|
ParamListInfo params);
|
|
|
|
extern void FreeQueryDesc(QueryDesc *qdesc);
|
|
|
|
#endif /* EXECDESC_H */
|