1pub const BOOL: u32 = 16;
8
9pub const BYTEA: u32 = 17;
11
12pub const CHAR: u32 = 18;
14
15pub const NAME: u32 = 19;
17
18pub const INT8: u32 = 20;
20
21pub const INT2: u32 = 21;
23
24pub const INT4: u32 = 23;
26
27pub const TEXT: u32 = 25;
29
30pub const OID: u32 = 26;
32
33pub const XID: u32 = 28;
35
36pub const CID: u32 = 29;
38
39pub const JSON: u32 = 114;
41
42pub const XML: u32 = 142;
44
45pub const FLOAT4: u32 = 700;
47
48pub const FLOAT8: u32 = 701;
50
51pub const MONEY: u32 = 790;
53
54pub const MACADDR: u32 = 829;
56
57pub const CIDR: u32 = 650;
59
60pub const INET: u32 = 869;
62
63pub const VARCHAR: u32 = 1043;
65
66pub const BPCHAR: u32 = 1042;
68
69pub const DATE: u32 = 1082;
71
72pub const TIME: u32 = 1083;
74
75pub const TIMESTAMP: u32 = 1114;
77
78pub const TIMESTAMPTZ: u32 = 1184;
80
81pub const INTERVAL: u32 = 1186;
83
84pub const TIMETZ: u32 = 1266;
86
87pub const BIT: u32 = 1560;
89
90pub const VARBIT: u32 = 1562;
92
93pub const NUMERIC: u32 = 1700;
95
96pub const UUID: u32 = 2950;
98
99pub const JSONB: u32 = 3802;
101
102pub const INT4RANGE: u32 = 3904;
104
105pub const INT8RANGE: u32 = 3926;
107
108pub const NUMRANGE: u32 = 3906;
110
111pub const TSRANGE: u32 = 3908;
113
114pub const TSTZRANGE: u32 = 3910;
116
117pub const DATERANGE: u32 = 3912;
119
120pub const BOOL_ARRAY: u32 = 1000;
125
126pub const BYTEA_ARRAY: u32 = 1001;
128
129pub const CHAR_ARRAY: u32 = 1002;
131
132pub const NAME_ARRAY: u32 = 1003;
134
135pub const INT2_ARRAY: u32 = 1005;
137
138pub const INT4_ARRAY: u32 = 1007;
140
141pub const TEXT_ARRAY: u32 = 1009;
143
144pub const VARCHAR_ARRAY: u32 = 1015;
146
147pub const INT8_ARRAY: u32 = 1016;
149
150pub const FLOAT4_ARRAY: u32 = 1021;
152
153pub const FLOAT8_ARRAY: u32 = 1022;
155
156pub const OID_ARRAY: u32 = 1028;
158
159pub const TIMESTAMP_ARRAY: u32 = 1115;
161
162pub const DATE_ARRAY: u32 = 1182;
164
165pub const TIME_ARRAY: u32 = 1183;
167
168pub const TIMESTAMPTZ_ARRAY: u32 = 1185;
170
171pub const INTERVAL_ARRAY: u32 = 1187;
173
174pub const NUMERIC_ARRAY: u32 = 1231;
176
177pub const UUID_ARRAY: u32 = 2951;
179
180pub const JSON_ARRAY: u32 = 199;
182
183pub const JSONB_ARRAY: u32 = 3807;
185
186pub const UNKNOWN: u32 = 705;
190
191pub const VOID: u32 = 2278;
193
194#[must_use]
198pub const fn element_oid(array_oid: u32) -> Option<u32> {
199 match array_oid {
200 BOOL_ARRAY => Some(BOOL),
201 BYTEA_ARRAY => Some(BYTEA),
202 CHAR_ARRAY => Some(CHAR),
203 NAME_ARRAY => Some(NAME),
204 INT2_ARRAY => Some(INT2),
205 INT4_ARRAY => Some(INT4),
206 TEXT_ARRAY => Some(TEXT),
207 VARCHAR_ARRAY => Some(VARCHAR),
208 INT8_ARRAY => Some(INT8),
209 FLOAT4_ARRAY => Some(FLOAT4),
210 FLOAT8_ARRAY => Some(FLOAT8),
211 OID_ARRAY => Some(OID),
212 TIMESTAMP_ARRAY => Some(TIMESTAMP),
213 DATE_ARRAY => Some(DATE),
214 TIME_ARRAY => Some(TIME),
215 TIMESTAMPTZ_ARRAY => Some(TIMESTAMPTZ),
216 INTERVAL_ARRAY => Some(INTERVAL),
217 NUMERIC_ARRAY => Some(NUMERIC),
218 UUID_ARRAY => Some(UUID),
219 JSON_ARRAY => Some(JSON),
220 JSONB_ARRAY => Some(JSONB),
221 _ => None,
222 }
223}
224
225#[must_use]
229pub const fn array_oid(element_oid: u32) -> Option<u32> {
230 match element_oid {
231 BOOL => Some(BOOL_ARRAY),
232 BYTEA => Some(BYTEA_ARRAY),
233 CHAR => Some(CHAR_ARRAY),
234 NAME => Some(NAME_ARRAY),
235 INT2 => Some(INT2_ARRAY),
236 INT4 => Some(INT4_ARRAY),
237 TEXT => Some(TEXT_ARRAY),
238 VARCHAR => Some(VARCHAR_ARRAY),
239 INT8 => Some(INT8_ARRAY),
240 FLOAT4 => Some(FLOAT4_ARRAY),
241 FLOAT8 => Some(FLOAT8_ARRAY),
242 OID => Some(OID_ARRAY),
243 TIMESTAMP => Some(TIMESTAMP_ARRAY),
244 DATE => Some(DATE_ARRAY),
245 TIME => Some(TIME_ARRAY),
246 TIMESTAMPTZ => Some(TIMESTAMPTZ_ARRAY),
247 INTERVAL => Some(INTERVAL_ARRAY),
248 NUMERIC => Some(NUMERIC_ARRAY),
249 UUID => Some(UUID_ARRAY),
250 JSON => Some(JSON_ARRAY),
251 JSONB => Some(JSONB_ARRAY),
252 _ => None,
253 }
254}
255
256#[must_use]
258pub const fn is_array(type_oid: u32) -> bool {
259 element_oid(type_oid).is_some()
260}
261
262#[must_use]
264pub const fn type_name(type_oid: u32) -> &'static str {
265 match type_oid {
266 BOOL => "bool",
267 BYTEA => "bytea",
268 CHAR => "char",
269 NAME => "name",
270 INT8 => "int8",
271 INT2 => "int2",
272 INT4 => "int4",
273 TEXT => "text",
274 OID => "oid",
275 XID => "xid",
276 CID => "cid",
277 JSON => "json",
278 XML => "xml",
279 FLOAT4 => "float4",
280 FLOAT8 => "float8",
281 MONEY => "money",
282 MACADDR => "macaddr",
283 CIDR => "cidr",
284 INET => "inet",
285 VARCHAR => "varchar",
286 BPCHAR => "bpchar",
287 DATE => "date",
288 TIME => "time",
289 TIMESTAMP => "timestamp",
290 TIMESTAMPTZ => "timestamptz",
291 INTERVAL => "interval",
292 TIMETZ => "timetz",
293 BIT => "bit",
294 VARBIT => "varbit",
295 NUMERIC => "numeric",
296 UUID => "uuid",
297 JSONB => "jsonb",
298 INT4RANGE => "int4range",
299 INT8RANGE => "int8range",
300 NUMRANGE => "numrange",
301 TSRANGE => "tsrange",
302 TSTZRANGE => "tstzrange",
303 DATERANGE => "daterange",
304 BOOL_ARRAY => "bool[]",
305 BYTEA_ARRAY => "bytea[]",
306 CHAR_ARRAY => "char[]",
307 NAME_ARRAY => "name[]",
308 INT2_ARRAY => "int2[]",
309 INT4_ARRAY => "int4[]",
310 TEXT_ARRAY => "text[]",
311 VARCHAR_ARRAY => "varchar[]",
312 INT8_ARRAY => "int8[]",
313 FLOAT4_ARRAY => "float4[]",
314 FLOAT8_ARRAY => "float8[]",
315 OID_ARRAY => "oid[]",
316 TIMESTAMP_ARRAY => "timestamp[]",
317 DATE_ARRAY => "date[]",
318 TIME_ARRAY => "time[]",
319 TIMESTAMPTZ_ARRAY => "timestamptz[]",
320 INTERVAL_ARRAY => "interval[]",
321 NUMERIC_ARRAY => "numeric[]",
322 UUID_ARRAY => "uuid[]",
323 JSON_ARRAY => "json[]",
324 JSONB_ARRAY => "jsonb[]",
325 UNKNOWN => "unknown",
326 VOID => "void",
327 _ => "unknown",
328 }
329}
330
331#[cfg(test)]
332mod tests {
333 use super::*;
334
335 #[test]
336 fn test_element_oid_mapping() {
337 assert_eq!(element_oid(INT4_ARRAY), Some(INT4));
338 assert_eq!(element_oid(TEXT_ARRAY), Some(TEXT));
339 assert_eq!(element_oid(UUID_ARRAY), Some(UUID));
340 assert_eq!(element_oid(INT4), None);
341 }
342
343 #[test]
344 fn test_array_oid_mapping() {
345 assert_eq!(array_oid(INT4), Some(INT4_ARRAY));
346 assert_eq!(array_oid(TEXT), Some(TEXT_ARRAY));
347 assert_eq!(array_oid(UUID), Some(UUID_ARRAY));
348 assert_eq!(array_oid(UNKNOWN), None);
349 }
350
351 #[test]
352 fn test_is_array() {
353 assert!(is_array(INT4_ARRAY));
354 assert!(is_array(TEXT_ARRAY));
355 assert!(!is_array(INT4));
356 assert!(!is_array(TEXT));
357 }
358
359 #[test]
360 fn test_type_names() {
361 assert_eq!(type_name(INT4), "int4");
362 assert_eq!(type_name(TEXT), "text");
363 assert_eq!(type_name(INT4_ARRAY), "int4[]");
364 assert_eq!(type_name(999_999), "unknown");
365 }
366}