123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*-------------------------------------------------------------------------
- *
- * partprune.h
- * prototypes for partprune.c
- *
- *
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/partitioning/partprune.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PARTPRUNE_H
- #define PARTPRUNE_H
- #include "nodes/execnodes.h"
- #include "partitioning/partdefs.h"
- struct PlannerInfo; /* avoid including pathnodes.h here */
- struct RelOptInfo;
- /*
- * PartitionPruneContext
- * Stores information needed at runtime for pruning computations
- * related to a single partitioned table.
- *
- * strategy Partition strategy, e.g. LIST, RANGE, HASH.
- * partnatts Number of columns in the partition key.
- * nparts Number of partitions in this partitioned table.
- * boundinfo Partition boundary info for the partitioned table.
- * partcollation Array of partnatts elements, storing the collations of the
- * partition key columns.
- * partsupfunc Array of FmgrInfos for the comparison or hashing functions
- * associated with the partition keys (partnatts elements).
- * (This points into the partrel's partition key, typically.)
- * stepcmpfuncs Array of FmgrInfos for the comparison or hashing function
- * for each pruning step and partition key.
- * ppccontext Memory context holding this PartitionPruneContext's
- * subsidiary data, such as the FmgrInfos.
- * planstate Points to the parent plan node's PlanState when called
- * during execution; NULL when called from the planner.
- * exprcontext ExprContext to use when evaluating pruning expressions
- * exprstates Array of ExprStates, indexed as per PruneCxtStateIdx; one
- * for each partition key in each pruning step. Allocated if
- * planstate is non-NULL, otherwise NULL.
- */
- typedef struct PartitionPruneContext
- {
- char strategy;
- int partnatts;
- int nparts;
- PartitionBoundInfo boundinfo;
- Oid *partcollation;
- FmgrInfo *partsupfunc;
- FmgrInfo *stepcmpfuncs;
- MemoryContext ppccontext;
- PlanState *planstate;
- ExprContext *exprcontext;
- ExprState **exprstates;
- } PartitionPruneContext;
- /*
- * PruneCxtStateIdx() computes the correct index into the stepcmpfuncs[]
- * and exprstates[] arrays for step step_id and partition key column keyno.
- * (Note: there is code that assumes the entries for a given step are
- * sequential, so this is not chosen freely.)
- */
- #define PruneCxtStateIdx(partnatts, step_id, keyno) \
- ((partnatts) * (step_id) + (keyno))
- extern PartitionPruneInfo *make_partition_pruneinfo(struct PlannerInfo *root,
- struct RelOptInfo *parentrel,
- List *subpaths,
- List *prunequal);
- extern Bitmapset *prune_append_rel_partitions(struct RelOptInfo *rel);
- extern Bitmapset *get_matching_partitions(PartitionPruneContext *context,
- List *pruning_steps);
- #endif /* PARTPRUNE_H */
|