Skip to main content

wtx/database/client/postgres/
ty.rs

1#![expect(clippy::too_many_lines, reason = "PostgreSQL stuff")]
2
3/// Type
4#[derive(Clone, Copy, Debug, Eq, PartialEq)]
5pub enum Ty {
6  /// ``Bool``
7  Bool,
8  /// `Bytea`
9  Bytea,
10  /// `Char`
11  Char,
12  /// `Name`
13  Name,
14  /// `Int8`
15  Int8,
16  /// `Int2`
17  Int2,
18  /// `Int2Vector`
19  Int2Vector,
20  /// `Int4`
21  Int4,
22  /// `Regproc`
23  Regproc,
24  /// `Text`
25  Text,
26  /// `Oid`
27  Oid,
28  /// `Tid`
29  Tid,
30  /// `Xid`
31  Xid,
32  /// `Cid`
33  Cid,
34  /// `OidVector`
35  OidVector,
36  /// `PgDdlCommand`
37  PgDdlCommand,
38  /// `Json`
39  Json,
40  /// `Xml`
41  Xml,
42  /// `XmlArray`
43  XmlArray,
44  /// `PgNodeTree`
45  PgNodeTree,
46  /// `JsonArray`
47  JsonArray,
48  /// `TableAmHandler`
49  TableAmHandler,
50  /// `Xid8Array`
51  Xid8Array,
52  /// `IndexAmHandler`
53  IndexAmHandler,
54  /// `Point`
55  Point,
56  /// `Lseg`
57  Lseg,
58  /// `Path`
59  Path,
60  /// `Box`
61  Box,
62  /// `Polygon`
63  Polygon,
64  /// `Line`
65  Line,
66  /// `LineArray`
67  LineArray,
68  /// `Cidr`
69  Cidr,
70  /// `CidrArray`
71  CidrArray,
72  /// `Float4`
73  Float4,
74  /// `Float8`
75  Float8,
76  /// `Unknown`
77  Unknown,
78  /// `Circle`
79  Circle,
80  /// `CircleArray`
81  CircleArray,
82  /// `Macaddr8`
83  Macaddr8,
84  /// `Macaddr8Array`
85  Macaddr8Array,
86  /// `Money`
87  Money,
88  /// `MoneyArray`
89  MoneyArray,
90  /// `Macaddr`
91  Macaddr,
92  /// `Inet`
93  Inet,
94  /// `BoolArray`
95  BoolArray,
96  /// `ByteaArray`
97  ByteaArray,
98  /// `CharArray`
99  CharArray,
100  /// `NameArray`
101  NameArray,
102  /// `Int2Array`
103  Int2Array,
104  /// `Int2VectorArray`
105  Int2VectorArray,
106  /// `Int4Array`
107  Int4Array,
108  /// `RegprocArray`
109  RegprocArray,
110  /// `TextArray`
111  TextArray,
112  /// `TidArray`
113  TidArray,
114  /// `XidArray`
115  XidArray,
116  /// `CidArray`
117  CidArray,
118  /// `OidVectorArray`
119  OidVectorArray,
120  /// `BpcharArray`
121  BpcharArray,
122  /// `VarcharArray`
123  VarcharArray,
124  /// `Int8Array`
125  Int8Array,
126  /// `PointArray`
127  PointArray,
128  /// `LsegArray`
129  LsegArray,
130  /// `PathArray`
131  PathArray,
132  /// `BoxArray`
133  BoxArray,
134  /// `Float4Array`
135  Float4Array,
136  /// `Float8Array`
137  Float8Array,
138  /// `PolygonArray`
139  PolygonArray,
140  /// `OidArray`
141  OidArray,
142  /// `Aclitem`
143  Aclitem,
144  /// `AclitemArray`
145  AclitemArray,
146  /// `MacaddrArray`
147  MacaddrArray,
148  /// `InetArray`
149  InetArray,
150  /// `Bpchar`
151  Bpchar,
152  /// `Varchar`
153  Varchar,
154  /// `Date`
155  Date,
156  /// `Time`
157  Time,
158  /// `Timestamp`
159  Timestamp,
160  /// `TimestampArray`
161  TimestampArray,
162  /// `DateArray`
163  DateArray,
164  /// `TimeArray`
165  TimeArray,
166  /// `Timestamptz`
167  Timestamptz,
168  /// `TimestamptzArray`
169  TimestamptzArray,
170  /// `Interval`
171  Interval,
172  /// `IntervalArray`
173  IntervalArray,
174  /// `NumericArray`
175  NumericArray,
176  /// `CstringArray`
177  CstringArray,
178  /// `Timetz`
179  Timetz,
180  /// `TimetzArray`
181  TimetzArray,
182  /// `Bit`
183  Bit,
184  /// `BitArray`
185  BitArray,
186  /// `Varbit`
187  Varbit,
188  /// `VarbitArray`
189  VarbitArray,
190  /// `Numeric`
191  Numeric,
192  /// `Refcursor`
193  Refcursor,
194  /// `RefcursorArray`
195  RefcursorArray,
196  /// `Regprocedure`
197  Regprocedure,
198  /// `Regoper`
199  Regoper,
200  /// `Regoperator`
201  Regoperator,
202  /// `Regclass`
203  Regclass,
204  /// `Regtype`
205  Regtype,
206  /// `RegprocedureArray`
207  RegprocedureArray,
208  /// `RegoperArray`
209  RegoperArray,
210  /// `RegoperatorArray`
211  RegoperatorArray,
212  /// `RegclassArray`
213  RegclassArray,
214  /// `RegtypeArray`
215  RegtypeArray,
216  /// `Record`
217  Record,
218  /// `Cstring`
219  Cstring,
220  /// `Any`
221  Any,
222  /// `Anyarray`
223  Anyarray,
224  /// `Void`
225  Void,
226  /// `Trigger`
227  Trigger,
228  /// `LanguageHandler`
229  LanguageHandler,
230  /// `Internal`
231  Internal,
232  /// `Anyelement`
233  Anyelement,
234  /// `RecordArray`
235  RecordArray,
236  /// `Anynonarray`
237  Anynonarray,
238  /// `TxidSnapshotArray`
239  TxidSnapshotArray,
240  /// `Uuid`
241  Uuid,
242  /// `UuidArray`
243  UuidArray,
244  /// `TxidSnapshot`
245  TxidSnapshot,
246  /// `FdwHandler`
247  FdwHandler,
248  /// `PgLsn`
249  PgLsn,
250  /// `PgLsnArray`
251  PgLsnArray,
252  /// `TsmHandler`
253  TsmHandler,
254  /// `PgNdistinct`
255  PgNdistinct,
256  /// `PgDependencies`
257  PgDependencies,
258  /// `Anyenum`
259  Anyenum,
260  /// `TsVector`
261  TsVector,
262  /// `Tsquery`
263  Tsquery,
264  /// `GtsVector`
265  GtsVector,
266  /// `TsVectorArray`
267  TsVectorArray,
268  /// `GtsVectorArray`
269  GtsVectorArray,
270  /// `TsqueryArray`
271  TsqueryArray,
272  /// `Regconfig`
273  Regconfig,
274  /// `RegconfigArray`
275  RegconfigArray,
276  /// `Regdictionary`
277  Regdictionary,
278  /// `RegdictionaryArray`
279  RegdictionaryArray,
280  /// `Jsonb`
281  Jsonb,
282  /// `JsonbArray`
283  JsonbArray,
284  /// `AnyRange`
285  AnyRange,
286  /// `EventTrigger`
287  EventTrigger,
288  /// `Int4Range`
289  Int4Range,
290  /// `Int4RangeArray`
291  Int4RangeArray,
292  /// `NumRange`
293  NumRange,
294  /// `NumRangeArray`
295  NumRangeArray,
296  /// `TsRange`
297  TsRange,
298  /// `TsRangeArray`
299  TsRangeArray,
300  /// `TstzRange`
301  TstzRange,
302  /// `TstzRangeArray`
303  TstzRangeArray,
304  /// `DateRange`
305  DateRange,
306  /// `DateRangeArray`
307  DateRangeArray,
308  /// `Int8Range`
309  Int8Range,
310  /// `Int8RangeArray`
311  Int8RangeArray,
312  /// `Jsonpath`
313  Jsonpath,
314  /// `JsonpathArray`
315  JsonpathArray,
316  /// `Regnamespace`
317  Regnamespace,
318  /// `RegnamespaceArray`
319  RegnamespaceArray,
320  /// `Regrole`
321  Regrole,
322  /// `RegroleArray`
323  RegroleArray,
324  /// `Regcollation`
325  Regcollation,
326  /// `RegcollationArray`
327  RegcollationArray,
328  /// `PgBrinBloomSummary`
329  PgBrinBloomSummary,
330  /// `PgBrinMinmaxMultiSummary`
331  PgBrinMinmaxMultiSummary,
332  /// `PgMcvList`
333  PgMcvList,
334  /// `PgSnapshot`
335  PgSnapshot,
336  /// `PgSnapshotArray`
337  PgSnapshotArray,
338  /// `Xid8`
339  Xid8,
340  /// `Anycompatible`
341  Anycompatible,
342  /// `Anycompatiblearray`
343  Anycompatiblearray,
344  /// `Anycompatiblenonarray`
345  Anycompatiblenonarray,
346  /// `AnycompatibleRange`
347  AnycompatibleRange,
348  /// `Custom`
349  Custom(u32),
350}
351
352impl Ty {
353  pub(crate) fn from_arbitrary_u32(value: u32) -> Self {
354    Self::from_known_u32(value).unwrap_or(Self::Custom(value))
355  }
356
357  pub(crate) const fn from_known_u32(value: u32) -> Option<Self> {
358    Some(match value {
359      16 => Self::Bool,
360      17 => Self::Bytea,
361      18 => Self::Char,
362      19 => Self::Name,
363      20 => Self::Int8,
364      21 => Self::Int2,
365      22 => Self::Int2Vector,
366      23 => Self::Int4,
367      24 => Self::Regproc,
368      25 => Self::Text,
369      26 => Self::Oid,
370      27 => Self::Tid,
371      28 => Self::Xid,
372      29 => Self::Cid,
373      30 => Self::OidVector,
374      32 => Self::PgDdlCommand,
375      114 => Self::Json,
376      142 => Self::Xml,
377      143 => Self::XmlArray,
378      194 => Self::PgNodeTree,
379      199 => Self::JsonArray,
380      269 => Self::TableAmHandler,
381      271 => Self::Xid8Array,
382      325 => Self::IndexAmHandler,
383      600 => Self::Point,
384      601 => Self::Lseg,
385      602 => Self::Path,
386      603 => Self::Box,
387      604 => Self::Polygon,
388      628 => Self::Line,
389      629 => Self::LineArray,
390      650 => Self::Cidr,
391      651 => Self::CidrArray,
392      700 => Self::Float4,
393      701 => Self::Float8,
394      705 => Self::Unknown,
395      718 => Self::Circle,
396      719 => Self::CircleArray,
397      774 => Self::Macaddr8,
398      775 => Self::Macaddr8Array,
399      790 => Self::Money,
400      791 => Self::MoneyArray,
401      829 => Self::Macaddr,
402      869 => Self::Inet,
403      1000 => Self::BoolArray,
404      1001 => Self::ByteaArray,
405      1002 => Self::CharArray,
406      1003 => Self::NameArray,
407      1005 => Self::Int2Array,
408      1006 => Self::Int2VectorArray,
409      1007 => Self::Int4Array,
410      1008 => Self::RegprocArray,
411      1009 => Self::TextArray,
412      1010 => Self::TidArray,
413      1011 => Self::XidArray,
414      1012 => Self::CidArray,
415      1013 => Self::OidVectorArray,
416      1014 => Self::BpcharArray,
417      1015 => Self::VarcharArray,
418      1016 => Self::Int8Array,
419      1017 => Self::PointArray,
420      1018 => Self::LsegArray,
421      1019 => Self::PathArray,
422      1020 => Self::BoxArray,
423      1021 => Self::Float4Array,
424      1022 => Self::Float8Array,
425      1027 => Self::PolygonArray,
426      1028 => Self::OidArray,
427      1033 => Self::Aclitem,
428      1034 => Self::AclitemArray,
429      1040 => Self::MacaddrArray,
430      1041 => Self::InetArray,
431      1042 => Self::Bpchar,
432      1043 => Self::Varchar,
433      1082 => Self::Date,
434      1083 => Self::Time,
435      1114 => Self::Timestamp,
436      1115 => Self::TimestampArray,
437      1182 => Self::DateArray,
438      1183 => Self::TimeArray,
439      1184 => Self::Timestamptz,
440      1185 => Self::TimestamptzArray,
441      1186 => Self::Interval,
442      1187 => Self::IntervalArray,
443      1231 => Self::NumericArray,
444      1263 => Self::CstringArray,
445      1266 => Self::Timetz,
446      1270 => Self::TimetzArray,
447      1560 => Self::Bit,
448      1561 => Self::BitArray,
449      1562 => Self::Varbit,
450      1563 => Self::VarbitArray,
451      1700 => Self::Numeric,
452      1790 => Self::Refcursor,
453      2201 => Self::RefcursorArray,
454      2202 => Self::Regprocedure,
455      2203 => Self::Regoper,
456      2204 => Self::Regoperator,
457      2205 => Self::Regclass,
458      2206 => Self::Regtype,
459      2207 => Self::RegprocedureArray,
460      2208 => Self::RegoperArray,
461      2209 => Self::RegoperatorArray,
462      2210 => Self::RegclassArray,
463      2211 => Self::RegtypeArray,
464      2249 => Self::Record,
465      2275 => Self::Cstring,
466      2276 => Self::Any,
467      2277 => Self::Anyarray,
468      2278 => Self::Void,
469      2279 => Self::Trigger,
470      2280 => Self::LanguageHandler,
471      2281 => Self::Internal,
472      2283 => Self::Anyelement,
473      2287 => Self::RecordArray,
474      2776 => Self::Anynonarray,
475      2949 => Self::TxidSnapshotArray,
476      2950 => Self::Uuid,
477      2951 => Self::UuidArray,
478      2970 => Self::TxidSnapshot,
479      3115 => Self::FdwHandler,
480      3220 => Self::PgLsn,
481      3221 => Self::PgLsnArray,
482      3310 => Self::TsmHandler,
483      3361 => Self::PgNdistinct,
484      3402 => Self::PgDependencies,
485      3500 => Self::Anyenum,
486      3614 => Self::TsVector,
487      3615 => Self::Tsquery,
488      3642 => Self::GtsVector,
489      3643 => Self::TsVectorArray,
490      3644 => Self::GtsVectorArray,
491      3645 => Self::TsqueryArray,
492      3734 => Self::Regconfig,
493      3735 => Self::RegconfigArray,
494      3769 => Self::Regdictionary,
495      3770 => Self::RegdictionaryArray,
496      3802 => Self::Jsonb,
497      3807 => Self::JsonbArray,
498      3831 => Self::AnyRange,
499      3838 => Self::EventTrigger,
500      3904 => Self::Int4Range,
501      3905 => Self::Int4RangeArray,
502      3906 => Self::NumRange,
503      3907 => Self::NumRangeArray,
504      3908 => Self::TsRange,
505      3909 => Self::TsRangeArray,
506      3910 => Self::TstzRange,
507      3911 => Self::TstzRangeArray,
508      3912 => Self::DateRange,
509      3913 => Self::DateRangeArray,
510      3926 => Self::Int8Range,
511      3927 => Self::Int8RangeArray,
512      4072 => Self::Jsonpath,
513      4073 => Self::JsonpathArray,
514      4089 => Self::Regnamespace,
515      4090 => Self::RegnamespaceArray,
516      4096 => Self::Regrole,
517      4097 => Self::RegroleArray,
518      4191 => Self::Regcollation,
519      4192 => Self::RegcollationArray,
520      4600 => Self::PgBrinBloomSummary,
521      4601 => Self::PgBrinMinmaxMultiSummary,
522      5017 => Self::PgMcvList,
523      5038 => Self::PgSnapshot,
524      5039 => Self::PgSnapshotArray,
525      5069 => Self::Xid8,
526      5077 => Self::Anycompatible,
527      5078 => Self::Anycompatiblearray,
528      5079 => Self::Anycompatiblenonarray,
529      5080 => Self::AnycompatibleRange,
530      _ => return None,
531    })
532  }
533}
534
535impl From<Ty> for u32 {
536  #[inline]
537  fn from(from: Ty) -> Self {
538    match from {
539      Ty::Bool => 16,
540      Ty::Bytea => 17,
541      Ty::Char => 18,
542      Ty::Name => 19,
543      Ty::Int8 => 20,
544      Ty::Int2 => 21,
545      Ty::Int2Vector => 22,
546      Ty::Int4 => 23,
547      Ty::Regproc => 24,
548      Ty::Text => 25,
549      Ty::Oid => 26,
550      Ty::Tid => 27,
551      Ty::Xid => 28,
552      Ty::Cid => 29,
553      Ty::OidVector => 30,
554      Ty::PgDdlCommand => 32,
555      Ty::Json => 114,
556      Ty::Xml => 142,
557      Ty::XmlArray => 143,
558      Ty::PgNodeTree => 194,
559      Ty::JsonArray => 199,
560      Ty::TableAmHandler => 269,
561      Ty::Xid8Array => 271,
562      Ty::IndexAmHandler => 325,
563      Ty::Point => 600,
564      Ty::Lseg => 601,
565      Ty::Path => 602,
566      Ty::Box => 603,
567      Ty::Polygon => 604,
568      Ty::Line => 628,
569      Ty::LineArray => 629,
570      Ty::Cidr => 650,
571      Ty::CidrArray => 651,
572      Ty::Float4 => 700,
573      Ty::Float8 => 701,
574      Ty::Unknown => 705,
575      Ty::Circle => 718,
576      Ty::CircleArray => 719,
577      Ty::Macaddr8 => 774,
578      Ty::Macaddr8Array => 775,
579      Ty::Money => 790,
580      Ty::MoneyArray => 791,
581      Ty::Macaddr => 829,
582      Ty::Inet => 869,
583      Ty::BoolArray => 1000,
584      Ty::ByteaArray => 1001,
585      Ty::CharArray => 1002,
586      Ty::NameArray => 1003,
587      Ty::Int2Array => 1005,
588      Ty::Int2VectorArray => 1006,
589      Ty::Int4Array => 1007,
590      Ty::RegprocArray => 1008,
591      Ty::TextArray => 1009,
592      Ty::TidArray => 1010,
593      Ty::XidArray => 1011,
594      Ty::CidArray => 1012,
595      Ty::OidVectorArray => 1013,
596      Ty::BpcharArray => 1014,
597      Ty::VarcharArray => 1015,
598      Ty::Int8Array => 1016,
599      Ty::PointArray => 1017,
600      Ty::LsegArray => 1018,
601      Ty::PathArray => 1019,
602      Ty::BoxArray => 1020,
603      Ty::Float4Array => 1021,
604      Ty::Float8Array => 1022,
605      Ty::PolygonArray => 1027,
606      Ty::OidArray => 1028,
607      Ty::Aclitem => 1033,
608      Ty::AclitemArray => 1034,
609      Ty::MacaddrArray => 1040,
610      Ty::InetArray => 1041,
611      Ty::Bpchar => 1042,
612      Ty::Varchar => 1043,
613      Ty::Date => 1082,
614      Ty::Time => 1083,
615      Ty::Timestamp => 1114,
616      Ty::TimestampArray => 1115,
617      Ty::DateArray => 1182,
618      Ty::TimeArray => 1183,
619      Ty::Timestamptz => 1184,
620      Ty::TimestamptzArray => 1185,
621      Ty::Interval => 1186,
622      Ty::IntervalArray => 1187,
623      Ty::NumericArray => 1231,
624      Ty::CstringArray => 1263,
625      Ty::Timetz => 1266,
626      Ty::TimetzArray => 1270,
627      Ty::Bit => 1560,
628      Ty::BitArray => 1561,
629      Ty::Varbit => 1562,
630      Ty::VarbitArray => 1563,
631      Ty::Numeric => 1700,
632      Ty::Refcursor => 1790,
633      Ty::RefcursorArray => 2201,
634      Ty::Regprocedure => 2202,
635      Ty::Regoper => 2203,
636      Ty::Regoperator => 2204,
637      Ty::Regclass => 2205,
638      Ty::Regtype => 2206,
639      Ty::RegprocedureArray => 2207,
640      Ty::RegoperArray => 2208,
641      Ty::RegoperatorArray => 2209,
642      Ty::RegclassArray => 2210,
643      Ty::RegtypeArray => 2211,
644      Ty::Record => 2249,
645      Ty::Cstring => 2275,
646      Ty::Any => 2276,
647      Ty::Anyarray => 2277,
648      Ty::Void => 2278,
649      Ty::Trigger => 2279,
650      Ty::LanguageHandler => 2280,
651      Ty::Internal => 2281,
652      Ty::Anyelement => 2283,
653      Ty::RecordArray => 2287,
654      Ty::Anynonarray => 2776,
655      Ty::TxidSnapshotArray => 2949,
656      Ty::Uuid => 2950,
657      Ty::UuidArray => 2951,
658      Ty::TxidSnapshot => 2970,
659      Ty::FdwHandler => 3115,
660      Ty::PgLsn => 3220,
661      Ty::PgLsnArray => 3221,
662      Ty::TsmHandler => 3310,
663      Ty::PgNdistinct => 3361,
664      Ty::PgDependencies => 3402,
665      Ty::Anyenum => 3500,
666      Ty::TsVector => 3614,
667      Ty::Tsquery => 3615,
668      Ty::GtsVector => 3642,
669      Ty::TsVectorArray => 3643,
670      Ty::GtsVectorArray => 3644,
671      Ty::TsqueryArray => 3645,
672      Ty::Regconfig => 3734,
673      Ty::RegconfigArray => 3735,
674      Ty::Regdictionary => 3769,
675      Ty::RegdictionaryArray => 3770,
676      Ty::Jsonb => 3802,
677      Ty::JsonbArray => 3807,
678      Ty::AnyRange => 3831,
679      Ty::EventTrigger => 3838,
680      Ty::Int4Range => 3904,
681      Ty::Int4RangeArray => 3905,
682      Ty::NumRange => 3906,
683      Ty::NumRangeArray => 3907,
684      Ty::TsRange => 3908,
685      Ty::TsRangeArray => 3909,
686      Ty::TstzRange => 3910,
687      Ty::TstzRangeArray => 3911,
688      Ty::DateRange => 3912,
689      Ty::DateRangeArray => 3913,
690      Ty::Int8Range => 3926,
691      Ty::Int8RangeArray => 3927,
692      Ty::Jsonpath => 4072,
693      Ty::JsonpathArray => 4073,
694      Ty::Regnamespace => 4089,
695      Ty::RegnamespaceArray => 4090,
696      Ty::Regrole => 4096,
697      Ty::RegroleArray => 4097,
698      Ty::Regcollation => 4191,
699      Ty::RegcollationArray => 4192,
700      Ty::PgBrinBloomSummary => 4600,
701      Ty::PgBrinMinmaxMultiSummary => 4601,
702      Ty::PgMcvList => 5017,
703      Ty::PgSnapshot => 5038,
704      Ty::PgSnapshotArray => 5039,
705      Ty::Xid8 => 5069,
706      Ty::Anycompatible => 5077,
707      Ty::Anycompatiblearray => 5078,
708      Ty::Anycompatiblenonarray => 5079,
709      Ty::AnycompatibleRange => 5080,
710      Ty::Custom(elem) => elem,
711    }
712  }
713}