Skip to main content

sentinel_driver/types/
builtin.rs

1use crate::types::Oid;
2
3/// Information about a PostgreSQL built-in type.
4#[derive(Debug, Clone)]
5pub struct TypeInfo {
6    pub oid: Oid,
7    pub name: &'static str,
8    pub array_oid: Option<Oid>,
9}
10
11/// Look up type info by OID.
12pub fn lookup(oid: Oid) -> Option<&'static TypeInfo> {
13    BUILTIN_TYPES.iter().find(|t| t.oid == oid)
14}
15
16/// Look up type info by name.
17pub fn lookup_by_name(name: &str) -> Option<&'static TypeInfo> {
18    BUILTIN_TYPES.iter().find(|t| t.name == name)
19}
20
21static BUILTIN_TYPES: &[TypeInfo] = &[
22    TypeInfo {
23        oid: Oid::BOOL,
24        name: "bool",
25        array_oid: Some(Oid::BOOL_ARRAY),
26    },
27    TypeInfo {
28        oid: Oid::BYTEA,
29        name: "bytea",
30        array_oid: Some(Oid::BYTEA_ARRAY),
31    },
32    TypeInfo {
33        oid: Oid::CHAR,
34        name: "char",
35        array_oid: None,
36    },
37    TypeInfo {
38        oid: Oid::INT8,
39        name: "int8",
40        array_oid: Some(Oid::INT8_ARRAY),
41    },
42    TypeInfo {
43        oid: Oid::INT2,
44        name: "int2",
45        array_oid: Some(Oid::INT2_ARRAY),
46    },
47    TypeInfo {
48        oid: Oid::INT4,
49        name: "int4",
50        array_oid: Some(Oid::INT4_ARRAY),
51    },
52    TypeInfo {
53        oid: Oid::TEXT,
54        name: "text",
55        array_oid: Some(Oid::TEXT_ARRAY),
56    },
57    TypeInfo {
58        oid: Oid::OID,
59        name: "oid",
60        array_oid: None,
61    },
62    TypeInfo {
63        oid: Oid::FLOAT4,
64        name: "float4",
65        array_oid: Some(Oid::FLOAT4_ARRAY),
66    },
67    TypeInfo {
68        oid: Oid::FLOAT8,
69        name: "float8",
70        array_oid: Some(Oid::FLOAT8_ARRAY),
71    },
72    TypeInfo {
73        oid: Oid::VARCHAR,
74        name: "varchar",
75        array_oid: Some(Oid::VARCHAR_ARRAY),
76    },
77    TypeInfo {
78        oid: Oid::DATE,
79        name: "date",
80        array_oid: Some(Oid::DATE_ARRAY),
81    },
82    TypeInfo {
83        oid: Oid::TIME,
84        name: "time",
85        array_oid: Some(Oid::TIME_ARRAY),
86    },
87    TypeInfo {
88        oid: Oid::TIMETZ,
89        name: "timetz",
90        array_oid: Some(Oid::TIMETZ_ARRAY),
91    },
92    TypeInfo {
93        oid: Oid::TIMESTAMP,
94        name: "timestamp",
95        array_oid: Some(Oid::TIMESTAMP_ARRAY),
96    },
97    TypeInfo {
98        oid: Oid::TIMESTAMPTZ,
99        name: "timestamptz",
100        array_oid: Some(Oid::TIMESTAMPTZ_ARRAY),
101    },
102    TypeInfo {
103        oid: Oid::UUID,
104        name: "uuid",
105        array_oid: Some(Oid::UUID_ARRAY),
106    },
107    TypeInfo {
108        oid: Oid::JSON,
109        name: "json",
110        array_oid: Some(Oid::JSON_ARRAY),
111    },
112    TypeInfo {
113        oid: Oid::JSONB,
114        name: "jsonb",
115        array_oid: Some(Oid::JSONB_ARRAY),
116    },
117    TypeInfo {
118        oid: Oid::INTERVAL,
119        name: "interval",
120        array_oid: Some(Oid::INTERVAL_ARRAY),
121    },
122    TypeInfo {
123        oid: Oid::INET,
124        name: "inet",
125        array_oid: Some(Oid::INET_ARRAY),
126    },
127    TypeInfo {
128        oid: Oid::CIDR,
129        name: "cidr",
130        array_oid: Some(Oid::CIDR_ARRAY),
131    },
132    TypeInfo {
133        oid: Oid::MACADDR,
134        name: "macaddr",
135        array_oid: Some(Oid::MACADDR_ARRAY),
136    },
137    TypeInfo {
138        oid: Oid::MACADDR8,
139        name: "macaddr8",
140        array_oid: Some(Oid::MACADDR8_ARRAY),
141    },
142    TypeInfo {
143        oid: Oid::NUMERIC,
144        name: "numeric",
145        array_oid: Some(Oid::NUMERIC_ARRAY),
146    },
147    TypeInfo {
148        oid: Oid::INT4RANGE,
149        name: "int4range",
150        array_oid: Some(Oid::INT4RANGE_ARRAY),
151    },
152    TypeInfo {
153        oid: Oid::INT8RANGE,
154        name: "int8range",
155        array_oid: Some(Oid::INT8RANGE_ARRAY),
156    },
157    TypeInfo {
158        oid: Oid::NUMRANGE,
159        name: "numrange",
160        array_oid: Some(Oid::NUMRANGE_ARRAY),
161    },
162    TypeInfo {
163        oid: Oid::TSRANGE,
164        name: "tsrange",
165        array_oid: Some(Oid::TSRANGE_ARRAY),
166    },
167    TypeInfo {
168        oid: Oid::TSTZRANGE,
169        name: "tstzrange",
170        array_oid: Some(Oid::TSTZRANGE_ARRAY),
171    },
172    TypeInfo {
173        oid: Oid::DATERANGE,
174        name: "daterange",
175        array_oid: Some(Oid::DATERANGE_ARRAY),
176    },
177    TypeInfo {
178        oid: Oid::INT4MULTIRANGE,
179        name: "int4multirange",
180        array_oid: Some(Oid::INT4MULTIRANGE_ARRAY),
181    },
182    TypeInfo {
183        oid: Oid::INT8MULTIRANGE,
184        name: "int8multirange",
185        array_oid: Some(Oid::INT8MULTIRANGE_ARRAY),
186    },
187    TypeInfo {
188        oid: Oid::NUMMULTIRANGE,
189        name: "nummultirange",
190        array_oid: Some(Oid::NUMMULTIRANGE_ARRAY),
191    },
192    TypeInfo {
193        oid: Oid::TSMULTIRANGE,
194        name: "tsmultirange",
195        array_oid: Some(Oid::TSMULTIRANGE_ARRAY),
196    },
197    TypeInfo {
198        oid: Oid::TSTZMULTIRANGE,
199        name: "tstzmultirange",
200        array_oid: Some(Oid::TSTZMULTIRANGE_ARRAY),
201    },
202    TypeInfo {
203        oid: Oid::DATEMULTIRANGE,
204        name: "datemultirange",
205        array_oid: Some(Oid::DATEMULTIRANGE_ARRAY),
206    },
207    TypeInfo {
208        oid: Oid::MONEY,
209        name: "money",
210        array_oid: Some(Oid::MONEY_ARRAY),
211    },
212    TypeInfo {
213        oid: Oid::POINT,
214        name: "point",
215        array_oid: Some(Oid::POINT_ARRAY),
216    },
217    TypeInfo {
218        oid: Oid::LINE,
219        name: "line",
220        array_oid: None,
221    },
222    TypeInfo {
223        oid: Oid::LSEG,
224        name: "lseg",
225        array_oid: None,
226    },
227    TypeInfo {
228        oid: Oid::PG_BOX,
229        name: "box",
230        array_oid: None,
231    },
232    TypeInfo {
233        oid: Oid::CIRCLE,
234        name: "circle",
235        array_oid: Some(Oid::CIRCLE_ARRAY),
236    },
237    TypeInfo {
238        oid: Oid::XML,
239        name: "xml",
240        array_oid: Some(Oid::XML_ARRAY),
241    },
242    TypeInfo {
243        oid: Oid::PG_LSN,
244        name: "pg_lsn",
245        array_oid: Some(Oid::PG_LSN_ARRAY),
246    },
247    TypeInfo {
248        oid: Oid::BIT,
249        name: "bit",
250        array_oid: Some(Oid::BIT_ARRAY),
251    },
252    TypeInfo {
253        oid: Oid::VARBIT,
254        name: "varbit",
255        array_oid: Some(Oid::VARBIT_ARRAY),
256    },
257];