1use crate::types::Oid;
2
3#[derive(Debug, Clone)]
5pub struct TypeInfo {
6 pub oid: Oid,
7 pub name: &'static str,
8 pub array_oid: Option<Oid>,
9}
10
11pub fn lookup(oid: Oid) -> Option<&'static TypeInfo> {
13 BUILTIN_TYPES.iter().find(|t| t.oid == oid)
14}
15
16pub 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];