diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/executor/execdesc.h | 3 | ||||
-rw-r--r-- | src/include/executor/executor.h | 7 | ||||
-rw-r--r-- | src/include/tcop/pquery.h | 2 | ||||
-rw-r--r-- | src/include/utils/portal.h | 1 |
4 files changed, 9 insertions, 4 deletions
diff --git a/src/include/executor/execdesc.h b/src/include/executor/execdesc.h index c99ea818158..87e7ca85082 100644 --- a/src/include/executor/execdesc.h +++ b/src/include/executor/execdesc.h @@ -47,6 +47,9 @@ typedef struct QueryDesc 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; diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h index e64d6fb93fe..a5c75e771f0 100644 --- a/src/include/executor/executor.h +++ b/src/include/executor/executor.h @@ -81,7 +81,8 @@ extern PGDLLIMPORT ExecutorStart_hook_type ExecutorStart_hook; /* Hook for plugins to get control in ExecutorRun() */ typedef void (*ExecutorRun_hook_type) (QueryDesc *queryDesc, ScanDirection direction, - uint64 count); + uint64 count, + bool execute_once); extern PGDLLIMPORT ExecutorRun_hook_type ExecutorRun_hook; /* Hook for plugins to get control in ExecutorFinish() */ @@ -176,9 +177,9 @@ extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter, extern void ExecutorStart(QueryDesc *queryDesc, int eflags); extern void standard_ExecutorStart(QueryDesc *queryDesc, int eflags); extern void ExecutorRun(QueryDesc *queryDesc, - ScanDirection direction, uint64 count); + ScanDirection direction, uint64 count, bool execute_once); extern void standard_ExecutorRun(QueryDesc *queryDesc, - ScanDirection direction, uint64 count); + ScanDirection direction, uint64 count, bool execute_once); extern void ExecutorFinish(QueryDesc *queryDesc); extern void standard_ExecutorFinish(QueryDesc *queryDesc); extern void ExecutorEnd(QueryDesc *queryDesc); diff --git a/src/include/tcop/pquery.h b/src/include/tcop/pquery.h index 61c0b3447e5..12ff4588c61 100644 --- a/src/include/tcop/pquery.h +++ b/src/include/tcop/pquery.h @@ -34,7 +34,7 @@ extern void PortalSetResultFormat(Portal portal, int nFormats, int16 *formats); extern bool PortalRun(Portal portal, long count, bool isTopLevel, - DestReceiver *dest, DestReceiver *altdest, + bool run_once, DestReceiver *dest, DestReceiver *altdest, char *completionTag); extern uint64 PortalRunFetch(Portal portal, diff --git a/src/include/utils/portal.h b/src/include/utils/portal.h index dc76acd0a42..e7c5a8bd091 100644 --- a/src/include/utils/portal.h +++ b/src/include/utils/portal.h @@ -141,6 +141,7 @@ typedef struct PortalData /* Features/options */ PortalStrategy strategy; /* see above */ int cursorOptions; /* DECLARE CURSOR option bits */ + bool run_once; /* portal will only be run once */ /* Status data */ PortalStatus status; /* see above */ |