init
This commit is contained in:
128
db_include/executor/execPartition.h
Executable file
128
db_include/executor/execPartition.h
Executable file
@@ -0,0 +1,128 @@
|
||||
/*--------------------------------------------------------------------
|
||||
* execPartition.h
|
||||
* POSTGRES partitioning executor interface
|
||||
*
|
||||
* Portions Copyright (c) 1996-2021, 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;
|
||||
|
||||
/*
|
||||
* 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,
|
||||
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 */
|
||||
Reference in New Issue
Block a user