diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/executor/execPartition.h | 18 | ||||
-rw-r--r-- | src/include/nodes/execnodes.h | 2 | ||||
-rw-r--r-- | src/include/nodes/plannodes.h | 12 |
3 files changed, 25 insertions, 7 deletions
diff --git a/src/include/executor/execPartition.h b/src/include/executor/execPartition.h index 13177831d9f..855fed4fea5 100644 --- a/src/include/executor/execPartition.h +++ b/src/include/executor/execPartition.h @@ -42,6 +42,9 @@ extern void ExecCleanupTupleRouting(ModifyTableState *mtstate, * PartitionedRelPruneInfo (see plannodes.h); though note that here, * subpart_map contains indexes into PartitionPruningData.partrelprunedata[]. * + * partrel Partitioned table Relation; obtained by + * ExecGetRangeTableRelation(estate, rti), where + * rti is PartitionedRelPruneInfo.rtindex. * nparts Length of subplan_map[] and subpart_map[]. * subplan_map Subplan index by partition index, or -1. * subpart_map Subpart index by partition index, or -1. @@ -58,6 +61,7 @@ extern void ExecCleanupTupleRouting(ModifyTableState *mtstate, */ typedef struct PartitionedRelPruningData { + Relation partrel; int nparts; int *subplan_map; int *subpart_map; @@ -90,6 +94,8 @@ typedef struct PartitionPruningData * the clauses being unable to match to any tuple that the subplan could * possibly produce. * + * econtext Standalone ExprContext to evaluate expressions in + * the pruning steps * execparamids Contains paramids of PARAM_EXEC Params found within * any of the partprunedata structs. Pruning must be * done again each time the value of one of these @@ -112,6 +118,7 @@ typedef struct PartitionPruningData */ typedef struct PartitionPruneState { + ExprContext *econtext; Bitmapset *execparamids; Bitmapset *other_subplans; MemoryContext prune_context; @@ -121,11 +128,12 @@ typedef struct PartitionPruneState PartitionPruningData *partprunedata[FLEXIBLE_ARRAY_MEMBER]; } PartitionPruneState; -extern PartitionPruneState *ExecInitPartitionPruning(PlanState *planstate, - int n_total_subplans, - int part_prune_index, - Bitmapset *relids, - Bitmapset **initially_valid_subplans); +extern void ExecDoInitialPruning(EState *estate); +extern PartitionPruneState *ExecInitPartitionExecPruning(PlanState *planstate, + int n_total_subplans, + int part_prune_index, + Bitmapset *relids, + Bitmapset **initially_valid_subplans); extern Bitmapset *ExecFindMatchingSubPlans(PartitionPruneState *prunestate, bool initial_prune); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 8ce4430af04..aca15f771a2 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -656,6 +656,8 @@ typedef struct EState List *es_rteperminfos; /* List of RTEPermissionInfo */ PlannedStmt *es_plannedstmt; /* link to top of plan tree */ List *es_part_prune_infos; /* List of PartitionPruneInfo */ + List *es_part_prune_states; /* List of PartitionPruneState */ + List *es_part_prune_results; /* List of Bitmapset */ const char *es_sourceText; /* Source text from QueryDesc */ JunkFilter *es_junkFilter; /* top-level junk filter, if any */ diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 8143744e89c..06d9559ebb9 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -281,7 +281,11 @@ typedef struct Append */ int first_partial_plan; - /* Index to PlannerInfo.partPruneInfos or -1 if no run-time pruning */ + /* + * Index into PlannedStmt.partPruneInfos and parallel lists in EState: + * es_part_prune_states and es_part_prune_results. Set to -1 if no + * run-time pruning is used. + */ int part_prune_index; } Append; @@ -316,7 +320,11 @@ typedef struct MergeAppend /* NULLS FIRST/LAST directions */ bool *nullsFirst pg_node_attr(array_size(numCols)); - /* Index to PlannerInfo.partPruneInfos or -1 if no run-time pruning */ + /* + * Index into PlannedStmt.partPruneInfos and parallel lists in EState: + * es_part_prune_states and es_part_prune_results. Set to -1 if no + * run-time pruning is used. + */ int part_prune_index; } MergeAppend; |