PostgreSQL Source Code  git master
partcache.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * partcache.h
4  *
5  * Copyright (c) 1996-2020, 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 */
39 
40  /* Type information per attribute */
44  bool *parttypbyval;
45  char *parttypalign;
48 
49 
52 extern Expr *get_partition_qual_relid(Oid relid);
53 
54 /*
55  * PartitionKey inquiry functions
56  */
57 static inline int
59 {
60  return key->strategy;
61 }
62 
63 static inline int
65 {
66  return key->partnatts;
67 }
68 
69 static inline List *
71 {
72  return key->partexprs;
73 }
74 
75 /*
76  * PartitionKey inquiry functions - one column
77  */
78 static inline int16
80 {
81  return key->partattrs[col];
82 }
83 
84 static inline Oid
86 {
87  return key->parttypid[col];
88 }
89 
90 static inline int32
92 {
93  return key->parttypmod[col];
94 }
95 
96 static inline Oid
98 {
99  return key->partcollation[col];
100 }
101 
102 #endif /* PARTCACHE_H */
List * RelationGetPartitionQual(Relation rel)
Definition: partcache.c:276
signed short int16
Definition: c.h:361
Definition: fmgr.h:56
Expr * get_partition_qual_relid(Oid relid)
Definition: partcache.c:298
Oid * partopfamily
Definition: partcache.h:33
FmgrInfo * partsupfunc
Definition: partcache.h:35
static int32 get_partition_col_typmod(PartitionKey key, int col)
Definition: partcache.h:91
static Oid get_partition_col_typid(PartitionKey key, int col)
Definition: partcache.h:85
struct PartitionKeyData PartitionKeyData
static int get_partition_natts(PartitionKey key)
Definition: partcache.h:64
List * partexprs
Definition: partcache.h:30
unsigned int Oid
Definition: postgres_ext.h:31
signed int int32
Definition: c.h:362
static List * get_partition_exprs(PartitionKey key)
Definition: partcache.h:70
Oid * parttypcoll
Definition: partcache.h:46
static int16 get_partition_col_attnum(PartitionKey key, int col)
Definition: partcache.h:79
Oid * partcollation
Definition: partcache.h:38
AttrNumber * partattrs
Definition: partcache.h:28
char * parttypalign
Definition: partcache.h:45
int32 * parttypmod
Definition: partcache.h:42
bool * parttypbyval
Definition: partcache.h:44
int16 * parttyplen
Definition: partcache.h:43
static Oid get_partition_col_collation(PartitionKey key, int col)
Definition: partcache.h:97
Oid * partopcintype
Definition: partcache.h:34
PartitionKey RelationGetPartitionKey(Relation rel)
Definition: partcache.c:54
static int get_partition_strategy(PartitionKey key)
Definition: partcache.h:58
Definition: pg_list.h:50
int16 AttrNumber
Definition: attnum.h:21