|
- /*--------------------------------------------------------------------
- * execPartition.h
- * POSTGRES partitioning executor interface
- *
- * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * IDENTIFICATION
- * src/include/executor/execPartition.h
- *--------------------------------------------------------------------
- */
-
- #ifndef EXECPARTITION_H
- #define EXECPARTITION_H
-
- #include "nodes/execnodes.h"
- #include "nodes/parsenodes.h"
- #include "nodes/plannodes.h"
- #include "partitioning/partprune.h"
-
- /* See execPartition.c for the definitions. */
- typedef struct PartitionDispatchData *PartitionDispatch;
- typedef struct PartitionTupleRouting PartitionTupleRouting;
-
- /*
- * PartitionRoutingInfo
- *
- * Additional result relation information specific to routing tuples to a
- * table partition.
- */
- typedef struct PartitionRoutingInfo
- {
- /*
- * Map for converting tuples in root partitioned table format into
- * partition format, or NULL if no conversion is required.
- */
- TupleConversionMap *pi_RootToPartitionMap;
-
- /*
- * Map for converting tuples in partition format into the root partitioned
- * table format, or NULL if no conversion is required.
- */
- TupleConversionMap *pi_PartitionToRootMap;
-
- /*
- * Slot to store tuples in partition format, or NULL when no translation
- * is required between root and partition.
- */
- TupleTableSlot *pi_PartitionTupleSlot;
- } PartitionRoutingInfo;
-
- /*
- * PartitionedRelPruningData - Per-partitioned-table data for run-time pruning
- * of partitions. For a multilevel partitioned table, we have one of these
- * for the topmost partition plus one for each non-leaf child partition.
- *
- * subplan_map[] and subpart_map[] have the same definitions as in
- * PartitionedRelPruneInfo (see plannodes.h); though note that here,
- * subpart_map contains indexes into PartitionPruningData.partrelprunedata[].
- *
- * 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.
- * present_parts A Bitmapset of the partition indexes that we
- * have subplans or subparts for.
- * initial_pruning_steps List of PartitionPruneSteps used to
- * perform executor startup pruning.
- * exec_pruning_steps List of PartitionPruneSteps used to
- * perform per-scan pruning.
- * initial_context If initial_pruning_steps isn't NIL, contains
- * the details needed to execute those steps.
- * exec_context If exec_pruning_steps isn't NIL, contains
- * the details needed to execute those steps.
- */
- typedef struct PartitionedRelPruningData
- {
- int nparts;
- int *subplan_map;
- int *subpart_map;
- Bitmapset *present_parts;
- List *initial_pruning_steps;
- List *exec_pruning_steps;
- PartitionPruneContext initial_context;
- PartitionPruneContext exec_context;
- } PartitionedRelPruningData;
-
- /*
- * PartitionPruningData - Holds all the run-time pruning information for
- * a single partitioning hierarchy containing one or more partitions.
- * partrelprunedata[] is an array ordered such that parents appear before
- * their children; in particular, the first entry is the topmost partition,
- * which was actually named in the SQL query.
- */
- typedef struct PartitionPruningData
- {
- int num_partrelprunedata; /* number of array entries */
- PartitionedRelPruningData partrelprunedata[FLEXIBLE_ARRAY_MEMBER];
- } PartitionPruningData;
-
- /*
- * PartitionPruneState - State object required for plan nodes to perform
- * run-time partition pruning.
- *
- * This struct can be attached to plan types which support arbitrary Lists of
- * subplans containing partitions, to allow subplans to be eliminated due to
- * the clauses being unable to match to any tuple that the subplan could
- * possibly produce.
- *
- * 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
- * parameters changes.
- * other_subplans Contains indexes of subplans that don't belong to any
- * "partprunedata", e.g UNION ALL children that are not
- * partitioned tables, or a partitioned table that the
- * planner deemed run-time pruning to be useless for.
- * These must not be pruned.
- * prune_context A short-lived memory context in which to execute the
- * partition pruning functions.
- * do_initial_prune true if pruning should be performed during executor
- * startup (at any hierarchy level).
- * do_exec_prune true if pruning should be performed during
- * executor run (at any hierarchy level).
- * num_partprunedata Number of items in "partprunedata" array.
- * partprunedata Array of PartitionPruningData pointers for the plan's
- * partitioned relation(s), one for each partitioning
- * hierarchy that requires run-time pruning.
- */
- typedef struct PartitionPruneState
- {
- Bitmapset *execparamids;
- Bitmapset *other_subplans;
- MemoryContext prune_context;
- bool do_initial_prune;
- bool do_exec_prune;
- int num_partprunedata;
- PartitionPruningData *partprunedata[FLEXIBLE_ARRAY_MEMBER];
- } PartitionPruneState;
-
- extern PartitionTupleRouting *ExecSetupPartitionTupleRouting(EState *estate,
- ModifyTableState *mtstate,
- Relation rel);
- extern ResultRelInfo *ExecFindPartition(ModifyTableState *mtstate,
- ResultRelInfo *rootResultRelInfo,
- PartitionTupleRouting *proute,
- TupleTableSlot *slot,
- EState *estate);
- extern void ExecCleanupTupleRouting(ModifyTableState *mtstate,
- PartitionTupleRouting *proute);
- extern PartitionPruneState *ExecCreatePartitionPruneState(PlanState *planstate,
- PartitionPruneInfo *partitionpruneinfo);
- extern Bitmapset *ExecFindMatchingSubPlans(PartitionPruneState *prunestate);
- extern Bitmapset *ExecFindInitialMatchingSubPlans(PartitionPruneState *prunestate,
- int nsubplans);
-
- #endif /* EXECPARTITION_H */
|