1pub type Oid = u32;
2
3pub const INT2OID: Oid = 21;
4pub const INT4OID: Oid = 23;
5pub const INT8OID: Oid = 20;
6pub const FLOAT4OID: Oid = 700;
7pub const FLOAT8OID: Oid = 701;
8pub const NUMERICOID: Oid = 1700;
9pub const BOOLOID: Oid = 16;
10pub const TEXTOID: Oid = 25;
11pub const VARCHAROID: Oid = 1043;
12pub const BYTEAOID: Oid = 17;
13pub const UUIDOID: Oid = 2950;
14pub const DATEOID: Oid = 1082;
15pub const TIMEOID: Oid = 1083;
16pub const TIMESTAMPOID: Oid = 1114;
17pub const TIMESTAMPTZOID: Oid = 1184;
18pub const JSONOID: Oid = 114;
19pub const JSONBOID: Oid = 3802;
20pub const INT2_ARRAY_OID: Oid = 1005;
21pub const INT4_ARRAY_OID: Oid = 1007;
22pub const INT8_ARRAY_OID: Oid = 1016;
23pub const TEXT_ARRAY_OID: Oid = 1009;
24pub const FLOAT8_ARRAY_OID: Oid = 1022;
25pub const BOOL_ARRAY_OID: Oid = 1000;
26pub const BYTEA_ARRAY_OID: Oid = 1001;
27pub const UUID_ARRAY_OID: Oid = 2951;
28pub const TIMESTAMPTZ_ARRAY_OID: Oid = 1185;
29pub const OIDOID: Oid = 26;
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq)]
32pub enum Format {
33 Text,
34 Binary,
35}
36
37#[derive(Debug, Clone)]
38pub struct PgType {
39 pub oid: Oid,
40 pub name: &'static str,
41}
42
43impl PgType {
44 pub const fn new(oid: Oid, name: &'static str) -> Self {
45 PgType {
46 oid,
47 name,
48 }
49 }
50}
51
52pub static INT2: PgType = PgType::new(INT2OID, "int2");
53pub static INT4: PgType = PgType::new(INT4OID, "int4");
54pub static INT8: PgType = PgType::new(INT8OID, "int8");
55pub static FLOAT4: PgType = PgType::new(FLOAT4OID, "float4");
56pub static FLOAT8: PgType = PgType::new(FLOAT8OID, "float8");
57pub static BOOL: PgType = PgType::new(BOOLOID, "bool");
58pub static TEXT: PgType = PgType::new(TEXTOID, "text");
59pub static BYTEA: PgType = PgType::new(BYTEAOID, "bytea");
60pub static UUID: PgType = PgType::new(UUIDOID, "uuid");
61pub static TIMESTAMPTZ: PgType = PgType::new(TIMESTAMPTZOID, "timestamptz");
62pub static INT2_ARRAY: PgType = PgType::new(INT2_ARRAY_OID, "_int2");
63pub static INT4_ARRAY: PgType = PgType::new(INT4_ARRAY_OID, "_int4");
64pub static INT8_ARRAY: PgType = PgType::new(INT8_ARRAY_OID, "_int8");
65pub static TEXT_ARRAY: PgType = PgType::new(TEXT_ARRAY_OID, "_text");
66pub static FLOAT8_ARRAY: PgType = PgType::new(FLOAT8_ARRAY_OID, "_float8");
67pub static BOOL_ARRAY: PgType = PgType::new(BOOL_ARRAY_OID, "_bool");
68pub static UUID_ARRAY: PgType = PgType::new(UUID_ARRAY_OID, "_uuid");
69
70pub fn element_to_array(elem: &PgType) -> &'static PgType {
71 match elem.oid {
72 INT2OID => &INT2_ARRAY,
73 INT4OID => &INT4_ARRAY,
74 INT8OID => &INT8_ARRAY,
75 FLOAT8OID => &FLOAT8_ARRAY,
76 BOOLOID => &BOOL_ARRAY,
77 UUIDOID => &UUID_ARRAY,
78 TEXTOID | VARCHAROID => &TEXT_ARRAY,
79 _ => &INT4_ARRAY,
80 }
81}
82
83impl PgType {
84 pub fn array_of(elem: &PgType) -> Self {
85 let oid = match elem.oid {
86 INT2OID => INT2_ARRAY_OID,
87 INT4OID => INT4_ARRAY_OID,
88 INT8OID => INT8_ARRAY_OID,
89 FLOAT8OID => FLOAT8_ARRAY_OID,
90 BOOLOID => BOOL_ARRAY_OID,
91 TEXTOID | VARCHAROID => TEXT_ARRAY_OID,
92 BYTEAOID => BYTEA_ARRAY_OID,
93 UUIDOID => UUID_ARRAY_OID,
94 TIMESTAMPTZOID => TIMESTAMPTZ_ARRAY_OID,
95 _ => INT4_ARRAY_OID,
96 };
97 PgType {
98 oid,
99 name: "", }
101 }
102}