/*------------------------------------------------------------------------- * * partcache.h * * Copyright (c) 1996-2023, PostgreSQL Global Development Group * * src/include/utils/partcache.h * *------------------------------------------------------------------------- */ #ifndef PARTCACHE_H #define PARTCACHE_H #include "access/attnum.h" #include "fmgr.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" #include "partitioning/partdefs.h" #include "utils/relcache.h" /* * Information about the partition key of a relation */ typedef struct PartitionKeyData { PartitionStrategy strategy; /* partitioning strategy */ int16 partnatts; /* number of columns in the partition key */ AttrNumber *partattrs; /* attribute numbers of columns in the * partition key or 0 if it's an expr */ List *partexprs; /* list of expressions in the partitioning * key, one for each zero-valued partattrs */ Oid *partopfamily; /* OIDs of operator families */ Oid *partopcintype; /* OIDs of opclass declared input data types */ FmgrInfo *partsupfunc; /* lookup info for support funcs */ /* Partitioning collation per attribute */ Oid *partcollation; /* Type information per attribute */ Oid *parttypid; int32 *parttypmod; int16 *parttyplen; bool *parttypbyval; char *parttypalign; Oid *parttypcoll; } PartitionKeyData; extern PartitionKey RelationGetPartitionKey(Relation rel); extern List *RelationGetPartitionQual(Relation rel); extern Expr *get_partition_qual_relid(Oid relid); /* * PartitionKey inquiry functions */ static inline int get_partition_strategy(PartitionKey key) { return key->strategy; } static inline int get_partition_natts(PartitionKey key) { return key->partnatts; } static inline List * get_partition_exprs(PartitionKey key) { return key->partexprs; } /* * PartitionKey inquiry functions - one column */ static inline int16 get_partition_col_attnum(PartitionKey key, int col) { return key->partattrs[col]; } static inline Oid get_partition_col_typid(PartitionKey key, int col) { return key->parttypid[col]; } static inline int32 get_partition_col_typmod(PartitionKey key, int col) { return key->parttypmod[col]; } static inline Oid get_partition_col_collation(PartitionKey key, int col) { return key->partcollation[col]; } #endif /* PARTCACHE_H */