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 */
24typedef 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
49extern void RelationBuildPartitionKey(Relation relation);
50extern List *RelationGetPartitionQual(Relation rel);
51extern Expr *get_partition_qual_relid(Oid relid);
52
53/*
54 * PartitionKey inquiry functions
55 */
56static inline int
57get_partition_strategy(PartitionKey key)
58{
59 return key->strategy;
60}
61
62static inline int
63get_partition_natts(PartitionKey key)
64{
65 return key->partnatts;
66}
67
68static inline List *
69get_partition_exprs(PartitionKey key)
70{
71 return key->partexprs;
72}
73
74/*
75 * PartitionKey inquiry functions - one column
76 */
77static inline int16
78get_partition_col_attnum(PartitionKey key, int col)
79{
80 return key->partattrs[col];
81}
82
83static inline Oid
84get_partition_col_typid(PartitionKey key, int col)
85{
86 return key->parttypid[col];
87}
88
89static inline int32
90get_partition_col_typmod(PartitionKey key, int col)
91{
92 return key->parttypmod[col];
93}
94
95static inline Oid
96get_partition_col_collation(PartitionKey key, int col)
97{
98 return key->partcollation[col];
99}
100
101#endif /* PARTCACHE_H */
102