1 /*------------------------------------------------------------------------- 2 * 3 * partcache.h 4 * 5 * Copyright (c) 1996-2019, PostgreSQL Global Development Group 6 * 7 * src/include/utils/partcache.h 8 * 9 *------------------------------------------------------------------------- 10 */ 11 #ifndef PARTCACHE_H 12 #define PARTCACHE_H 13 14 #include "access/attnum.h" 15 #include "fmgr.h" 16 #include "nodes/pg_list.h" 17 #include "nodes/primnodes.h" 18 #include "partitioning/partdefs.h" 19 #include "utils/relcache.h" 20 21 /* 22 * Information about the partition key of a relation 23 */ 24 typedef struct PartitionKeyData 25 { 26 char strategy; /* partitioning strategy */ 27 int16 partnatts; /* number of columns in the partition key */ 28 AttrNumber *partattrs; /* attribute numbers of columns in the 29 * partition key or 0 if it's an expr */ 30 List *partexprs; /* list of expressions in the partitioning 31 * key, one for each zero-valued partattrs */ 32 33 Oid *partopfamily; /* OIDs of operator families */ 34 Oid *partopcintype; /* OIDs of opclass declared input data types */ 35 FmgrInfo *partsupfunc; /* lookup info for support funcs */ 36 37 /* Partitioning collation per attribute */ 38 Oid *partcollation; 39 40 /* Type information per attribute */ 41 Oid *parttypid; 42 int32 *parttypmod; 43 int16 *parttyplen; 44 bool *parttypbyval; 45 char *parttypalign; 46 Oid *parttypcoll; 47 } PartitionKeyData; 48 49 extern void RelationBuildPartitionKey(Relation relation); 50 extern List *RelationGetPartitionQual(Relation rel); 51 extern Expr *get_partition_qual_relid(Oid relid); 52 53 /* 54 * PartitionKey inquiry functions 55 */ 56 static inline int 57 get_partition_strategy(PartitionKey key) 58 { 59 return key->strategy; 60 } 61 62 static inline int 63 get_partition_natts(PartitionKey key) 64 { 65 return key->partnatts; 66 } 67 68 static inline List * 69 get_partition_exprs(PartitionKey key) 70 { 71 return key->partexprs; 72 } 73 74 /* 75 * PartitionKey inquiry functions - one column 76 */ 77 static inline int16 78 get_partition_col_attnum(PartitionKey key, int col) 79 { 80 return key->partattrs[col]; 81 } 82 83 static inline Oid 84 get_partition_col_typid(PartitionKey key, int col) 85 { 86 return key->parttypid[col]; 87 } 88 89 static inline int32 90 get_partition_col_typmod(PartitionKey key, int col) 91 { 92 return key->parttypmod[col]; 93 } 94 95 static inline Oid 96 get_partition_col_collation(PartitionKey key, int col) 97 { 98 return key->partcollation[col]; 99 } 100 101 #endif /* PARTCACHE_H */ 102