1 /*------------------------------------------------------------------------- 2 * 3 * partprune.h 4 * prototypes for partprune.c 5 * 6 * 7 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/partitioning/partprune.h 11 * 12 *------------------------------------------------------------------------- 13 */ 14 #ifndef PARTPRUNE_H 15 #define PARTPRUNE_H 16 17 #include "nodes/execnodes.h" 18 #include "partitioning/partdefs.h" 19 20 struct PlannerInfo; /* avoid including pathnodes.h here */ 21 struct RelOptInfo; 22 23 24 /* 25 * PartitionPruneContext 26 * Stores information needed at runtime for pruning computations 27 * related to a single partitioned table. 28 * 29 * strategy Partition strategy, e.g. LIST, RANGE, HASH. 30 * partnatts Number of columns in the partition key. 31 * nparts Number of partitions in this partitioned table. 32 * boundinfo Partition boundary info for the partitioned table. 33 * partcollation Array of partnatts elements, storing the collations of the 34 * partition key columns. 35 * partsupfunc Array of FmgrInfos for the comparison or hashing functions 36 * associated with the partition keys (partnatts elements). 37 * (This points into the partrel's partition key, typically.) 38 * stepcmpfuncs Array of FmgrInfos for the comparison or hashing function 39 * for each pruning step and partition key. 40 * ppccontext Memory context holding this PartitionPruneContext's 41 * subsidiary data, such as the FmgrInfos. 42 * planstate Points to the parent plan node's PlanState when called 43 * during execution; NULL when called from the planner. 44 * exprstates Array of ExprStates, indexed as per PruneCxtStateIdx; one 45 * for each partition key in each pruning step. Allocated if 46 * planstate is non-NULL, otherwise NULL. 47 */ 48 typedef struct PartitionPruneContext 49 { 50 char strategy; 51 int partnatts; 52 int nparts; 53 PartitionBoundInfo boundinfo; 54 Oid *partcollation; 55 FmgrInfo *partsupfunc; 56 FmgrInfo *stepcmpfuncs; 57 MemoryContext ppccontext; 58 PlanState *planstate; 59 ExprState **exprstates; 60 } PartitionPruneContext; 61 62 /* 63 * PruneCxtStateIdx() computes the correct index into the stepcmpfuncs[], 64 * exprstates[] and exprhasexecparam[] arrays for step step_id and 65 * partition key column keyno. (Note: there is code that assumes the 66 * entries for a given step are sequential, so this is not chosen freely.) 67 */ 68 #define PruneCxtStateIdx(partnatts, step_id, keyno) \ 69 ((partnatts) * (step_id) + (keyno)) 70 71 extern PartitionPruneInfo *make_partition_pruneinfo(struct PlannerInfo *root, 72 struct RelOptInfo *parentrel, 73 List *subpaths, 74 List *partitioned_rels, 75 List *prunequal); 76 extern Bitmapset *prune_append_rel_partitions(struct RelOptInfo *rel); 77 extern Bitmapset *get_matching_partitions(PartitionPruneContext *context, 78 List *pruning_steps); 79 80 #endif /* PARTPRUNE_H */ 81