diff options
Diffstat (limited to 'src/include/nodes')
-rw-r--r-- | src/include/nodes/execnodes.h | 10 | ||||
-rw-r--r-- | src/include/nodes/pathnodes.h | 13 | ||||
-rw-r--r-- | src/include/nodes/plannodes.h | 35 |
3 files changed, 46 insertions, 12 deletions
diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index aca15f771a2..a2cba97e3d5 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -658,6 +658,10 @@ typedef struct EState List *es_part_prune_infos; /* List of PartitionPruneInfo */ List *es_part_prune_states; /* List of PartitionPruneState */ List *es_part_prune_results; /* List of Bitmapset */ + Bitmapset *es_unpruned_relids; /* PlannedStmt.unprunableRelids + RT + * indexes of leaf partitions that survive + * initial pruning; see + * ExecDoInitialPruning() */ const char *es_sourceText; /* Source text from QueryDesc */ JunkFilter *es_junkFilter; /* top-level junk filter, if any */ @@ -1440,6 +1444,12 @@ typedef struct ModifyTableState double mt_merge_inserted; double mt_merge_updated; double mt_merge_deleted; + + /* + * List of valid updateColnosLists. Contains only those belonging to + * unpruned relations from ModifyTable.updateColnosLists. + */ + List *mt_updateColnosLists; } ModifyTableState; /* ---------------- diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index 52d44f43021..00c700cc3e7 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -116,6 +116,19 @@ typedef struct PlannerGlobal /* "flat" rangetable for executor */ List *finalrtable; + /* + * RT indexes of all relation RTEs in finalrtable (RTE_RELATION and + * RTE_SUBQUERY RTEs of views) + */ + Bitmapset *allRelids; + + /* + * RT indexes of all leaf partitions in nodes that support pruning and are + * subject to runtime pruning at plan initialization time ("initial" + * pruning). + */ + Bitmapset *prunableRelids; + /* "flat" list of RTEPermissionInfos */ List *finalrteperminfos; diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 06d9559ebb9..2a2cf816cb6 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -74,6 +74,10 @@ typedef struct PlannedStmt List *rtable; /* list of RangeTblEntry nodes */ + Bitmapset *unprunableRelids; /* RT indexes of relations that are not + * subject to runtime pruning or are + * needed to perform runtime pruning */ + List *permInfos; /* list of RTEPermissionInfo nodes for rtable * entries needing one */ @@ -1449,18 +1453,22 @@ typedef struct PartitionPruneInfo * PartitionedRelPruneInfo - Details required to allow the executor to prune * partitions for a single partitioned table. * - * subplan_map[] and subpart_map[] are indexed by partition index of the - * partitioned table referenced by 'rtindex', the partition index being the - * order that the partitions are defined in the table's PartitionDesc. For a - * leaf partition p, subplan_map[p] contains the zero-based index of the - * partition's subplan in the parent plan's subplan list; it is -1 if the - * partition is non-leaf or has been pruned. For a non-leaf partition p, - * subpart_map[p] contains the zero-based index of that sub-partition's - * PartitionedRelPruneInfo in the hierarchy's PartitionedRelPruneInfo list; - * it is -1 if the partition is a leaf or has been pruned. Note that subplan - * indexes, as stored in 'subplan_map', are global across the parent plan - * node, but partition indexes are valid only within a particular hierarchy. - * relid_map[p] contains the partition's OID, or 0 if the partition was pruned. + * subplan_map[], subpart_map[], and leafpart_rti_map[] are indexed by partition + * index of the partitioned table referenced by 'rtindex', the partition index + * being the order that the partitions are defined in the table's + * PartitionDesc. For a leaf partition p, subplan_map[p] contains the + * zero-based index of the partition's subplan in the parent plan's subplan + * list; it is -1 if the partition is non-leaf or has been pruned. For a + * non-leaf partition p, subpart_map[p] contains the zero-based index of that + * sub-partition's PartitionedRelPruneInfo in the hierarchy's + * PartitionedRelPruneInfo list; it is -1 if the partition is a leaf or has + * been pruned. leafpart_rti_map[p] contains the RT index of a leaf partition + * if its subplan is in the parent plan' subplan list; it is 0 either if the + * partition is non-leaf or it is leaf but has been pruned during planning. + * Note that subplan indexes, as stored in 'subplan_map', are global across the + * parent plan node, but partition indexes are valid only within a particular + * hierarchy. relid_map[p] contains the partition's OID, or 0 if the partition + * was pruned. */ typedef struct PartitionedRelPruneInfo { @@ -1483,6 +1491,9 @@ typedef struct PartitionedRelPruneInfo /* subpart index by partition index, or -1 */ int *subpart_map pg_node_attr(array_size(nparts)); + /* RT index by partition index, or 0 */ + int *leafpart_rti_map pg_node_attr(array_size(nparts)); + /* relation OID by partition index, or 0 */ Oid *relid_map pg_node_attr(array_size(nparts)); |