Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * partcache.h
4 : : *
5 : : * Copyright (c) 1996-2024, 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
2192 alvherre@alvh.no-ip. 59 :CBC 5732 : get_partition_strategy(PartitionKey key)
60 : : {
61 : 5732 : return key->strategy;
62 : : }
63 : :
64 : : static inline int
65 : 6752 : get_partition_natts(PartitionKey key)
66 : : {
67 : 6752 : return key->partnatts;
68 : : }
69 : :
70 : : static inline List *
71 : 11566 : get_partition_exprs(PartitionKey key)
72 : : {
73 : 11566 : return key->partexprs;
74 : : }
75 : :
76 : : /*
77 : : * PartitionKey inquiry functions - one column
78 : : */
79 : : static inline int16
80 : 1202 : get_partition_col_attnum(PartitionKey key, int col)
81 : : {
82 : 1202 : return key->partattrs[col];
83 : : }
84 : :
85 : : static inline Oid
86 : 8012 : get_partition_col_typid(PartitionKey key, int col)
87 : : {
88 : 8012 : return key->parttypid[col];
89 : : }
90 : :
91 : : static inline int32
92 : 7929 : get_partition_col_typmod(PartitionKey key, int col)
93 : : {
94 : 7929 : return key->parttypmod[col];
95 : : }
96 : :
97 : : static inline Oid
1906 peter@eisentraut.org 98 : 7929 : get_partition_col_collation(PartitionKey key, int col)
99 : : {
100 : 7929 : return key->partcollation[col];
101 : : }
102 : :
103 : : #endif /* PARTCACHE_H */
|