Files
postgresql/src/include/partitioning/partprune.h
Peter Eisentraut d4d1fc527b Update various forward declarations to use typedef
There are a number of forward declarations that use struct but not the
customary typedef, because that could have led to repeat typedefs,
which was not allowed.  This is now allowed in C11, so we can update
these to provide the typedefs as well, so that the later uses of the
types look more consistent.

Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/10d32190-f31b-40a5-b177-11db55597355@eisentraut.org
2025-09-15 11:04:10 +02:00

82 lines
2.9 KiB
C

/*-------------------------------------------------------------------------
*
* partprune.h
* prototypes for partprune.c
*
*
* Portions Copyright (c) 1996-2025, 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"
typedef struct PlannerInfo PlannerInfo; /* avoid including pathnodes.h here */
typedef struct RelOptInfo 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 int make_partition_pruneinfo(PlannerInfo *root,
RelOptInfo *parentrel,
List *subpaths,
List *prunequal);
extern Bitmapset *prune_append_rel_partitions(RelOptInfo *rel);
extern Bitmapset *get_matching_partitions(PartitionPruneContext *context,
List *pruning_steps);
#endif /* PARTPRUNE_H */