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