1#![expect(clippy::too_many_lines, reason = "PostgreSQL stuff")]
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq)]
5pub enum Ty {
6 Bool,
8 Bytea,
10 Char,
12 Name,
14 Int8,
16 Int2,
18 Int2Vector,
20 Int4,
22 Regproc,
24 Text,
26 Oid,
28 Tid,
30 Xid,
32 Cid,
34 OidVector,
36 PgDdlCommand,
38 Json,
40 Xml,
42 XmlArray,
44 PgNodeTree,
46 JsonArray,
48 TableAmHandler,
50 Xid8Array,
52 IndexAmHandler,
54 Point,
56 Lseg,
58 Path,
60 Box,
62 Polygon,
64 Line,
66 LineArray,
68 Cidr,
70 CidrArray,
72 Float4,
74 Float8,
76 Unknown,
78 Circle,
80 CircleArray,
82 Macaddr8,
84 Macaddr8Array,
86 Money,
88 MoneyArray,
90 Macaddr,
92 Inet,
94 BoolArray,
96 ByteaArray,
98 CharArray,
100 NameArray,
102 Int2Array,
104 Int2VectorArray,
106 Int4Array,
108 RegprocArray,
110 TextArray,
112 TidArray,
114 XidArray,
116 CidArray,
118 OidVectorArray,
120 BpcharArray,
122 VarcharArray,
124 Int8Array,
126 PointArray,
128 LsegArray,
130 PathArray,
132 BoxArray,
134 Float4Array,
136 Float8Array,
138 PolygonArray,
140 OidArray,
142 Aclitem,
144 AclitemArray,
146 MacaddrArray,
148 InetArray,
150 Bpchar,
152 Varchar,
154 Date,
156 Time,
158 Timestamp,
160 TimestampArray,
162 DateArray,
164 TimeArray,
166 Timestamptz,
168 TimestamptzArray,
170 Interval,
172 IntervalArray,
174 NumericArray,
176 CstringArray,
178 Timetz,
180 TimetzArray,
182 Bit,
184 BitArray,
186 Varbit,
188 VarbitArray,
190 Numeric,
192 Refcursor,
194 RefcursorArray,
196 Regprocedure,
198 Regoper,
200 Regoperator,
202 Regclass,
204 Regtype,
206 RegprocedureArray,
208 RegoperArray,
210 RegoperatorArray,
212 RegclassArray,
214 RegtypeArray,
216 Record,
218 Cstring,
220 Any,
222 Anyarray,
224 Void,
226 Trigger,
228 LanguageHandler,
230 Internal,
232 Anyelement,
234 RecordArray,
236 Anynonarray,
238 TxidSnapshotArray,
240 Uuid,
242 UuidArray,
244 TxidSnapshot,
246 FdwHandler,
248 PgLsn,
250 PgLsnArray,
252 TsmHandler,
254 PgNdistinct,
256 PgDependencies,
258 Anyenum,
260 TsVector,
262 Tsquery,
264 GtsVector,
266 TsVectorArray,
268 GtsVectorArray,
270 TsqueryArray,
272 Regconfig,
274 RegconfigArray,
276 Regdictionary,
278 RegdictionaryArray,
280 Jsonb,
282 JsonbArray,
284 AnyRange,
286 EventTrigger,
288 Int4Range,
290 Int4RangeArray,
292 NumRange,
294 NumRangeArray,
296 TsRange,
298 TsRangeArray,
300 TstzRange,
302 TstzRangeArray,
304 DateRange,
306 DateRangeArray,
308 Int8Range,
310 Int8RangeArray,
312 Jsonpath,
314 JsonpathArray,
316 Regnamespace,
318 RegnamespaceArray,
320 Regrole,
322 RegroleArray,
324 Regcollation,
326 RegcollationArray,
328 PgBrinBloomSummary,
330 PgBrinMinmaxMultiSummary,
332 PgMcvList,
334 PgSnapshot,
336 PgSnapshotArray,
338 Xid8,
340 Anycompatible,
342 Anycompatiblearray,
344 Anycompatiblenonarray,
346 AnycompatibleRange,
348 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}