1 | /*-------------------------------------------------------------------- |
---|---|
2 | * execParallel.h |
3 | * POSTGRES parallel execution interface |
4 | * |
5 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
6 | * Portions Copyright (c) 1994, Regents of the University of California |
7 | * |
8 | * IDENTIFICATION |
9 | * src/include/executor/execParallel.h |
10 | *-------------------------------------------------------------------- |
11 | */ |
12 | |
13 | #ifndef EXECPARALLEL_H |
14 | #define EXECPARALLEL_H |
15 | |
16 | #include "access/parallel.h" |
17 | #include "nodes/execnodes.h" |
18 | #include "nodes/parsenodes.h" |
19 | #include "nodes/plannodes.h" |
20 | #include "utils/dsa.h" |
21 | |
22 | typedef struct SharedExecutorInstrumentation SharedExecutorInstrumentation; |
23 | |
24 | typedef struct ParallelExecutorInfo |
25 | { |
26 | PlanState *planstate; /* plan subtree we're running in parallel */ |
27 | ParallelContext *pcxt; /* parallel context we're using */ |
28 | BufferUsage *buffer_usage; /* points to bufusage area in DSM */ |
29 | SharedExecutorInstrumentation *instrumentation; /* optional */ |
30 | struct SharedJitInstrumentation *jit_instrumentation; /* optional */ |
31 | dsa_area *area; /* points to DSA area in DSM */ |
32 | dsa_pointer param_exec; /* serialized PARAM_EXEC parameters */ |
33 | bool finished; /* set true by ExecParallelFinish */ |
34 | /* These two arrays have pcxt->nworkers_launched entries: */ |
35 | shm_mq_handle **tqueue; /* tuple queues for worker output */ |
36 | struct TupleQueueReader **reader; /* tuple reader/writer support */ |
37 | } ParallelExecutorInfo; |
38 | |
39 | extern ParallelExecutorInfo *ExecInitParallelPlan(PlanState *planstate, |
40 | EState *estate, Bitmapset *sendParam, int nworkers, |
41 | int64 tuples_needed); |
42 | extern void ExecParallelCreateReaders(ParallelExecutorInfo *pei); |
43 | extern void ExecParallelFinish(ParallelExecutorInfo *pei); |
44 | extern void ExecParallelCleanup(ParallelExecutorInfo *pei); |
45 | extern void ExecParallelReinitialize(PlanState *planstate, |
46 | ParallelExecutorInfo *pei, Bitmapset *sendParam); |
47 | |
48 | extern void ParallelQueryMain(dsm_segment *seg, shm_toc *toc); |
49 | |
50 | #endif /* EXECPARALLEL_H */ |
51 |