diff --git a/codegen/src/type_gen.rs b/codegen/src/type_gen.rs index ae64895d..70f206db 100644 --- a/codegen/src/type_gen.rs +++ b/codegen/src/type_gen.rs @@ -14,6 +14,7 @@ const PG_RANGE_H: &'static str = include_str!("pg_range.h"); struct Type { name: &'static str, variant: String, + ident: String, kind: &'static str, element: u32, doc: String, @@ -27,8 +28,8 @@ pub fn build(path: &Path) { make_header(&mut file); make_enum(&mut file, &types); - make_display_impl(&mut file); make_impl(&mut file, &types); + make_consts(&mut file, &types); } fn parse_ranges() -> BTreeMap { @@ -69,14 +70,10 @@ fn parse_types(ranges: &BTreeMap) -> BTreeMap { let name = split[5]; - let variant = match name { - "anyarray" => "AnyArray".to_owned(), - name => { - let variant = range_vector_re.replace(name, "_$1"); - let variant = array_re.replace(&variant, "$1_array"); - snake_to_camel(&variant) - } - }; + let ident = range_vector_re.replace(name, "_$1"); + let ident = array_re.replace(&ident, "$1_array"); + let variant = snake_to_camel(&ident); + let ident = ident.to_ascii_uppercase(); let kind = split[11]; @@ -106,11 +103,12 @@ fn parse_types(ranges: &BTreeMap) -> BTreeMap { let doc = String::from_utf8(doc).unwrap(); let type_ = Type { - name: name, - variant: variant, - kind: kind, - element: element, - doc: doc, + name, + variant, + ident, + kind, + element, + doc, }; types.insert(oid, type_); @@ -123,10 +121,17 @@ fn make_header(w: &mut BufWriter) { write!( w, "// Autogenerated file - DO NOT EDIT -use std::fmt; +use std::sync::Arc; -use types::{{Oid, Kind, Other}}; +use types::{{Type, Oid, Kind}}; +#[derive(PartialEq, Eq, Debug)] +pub struct Other {{ + pub name: String, + pub oid: Oid, + pub kind: Kind, + pub schema: String, +}} " ).unwrap(); } @@ -134,55 +139,34 @@ use types::{{Oid, Kind, Other}}; fn make_enum(w: &mut BufWriter, types: &BTreeMap) { write!( w, - "/// A Postgres type. + " #[derive(PartialEq, Eq, Clone, Debug)] -pub enum Type {{ -" +pub enum Inner {{" ).unwrap(); for type_ in types.values() { write!( w, - " /// {} - {}, -", - type_.doc, + " + {},", type_.variant ).unwrap(); } write!( w, - r" /// An unknown type. - Other(Other), + r" + Other(Arc), }} " ).unwrap(); } -fn make_display_impl(w: &mut BufWriter) { - write!(w, -r#"impl fmt::Display for Type {{ - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {{ - match self.schema() {{ - "public" | "pg_catalog" => {{}} - schema => write!(fmt, "{{}}.", schema)?, - }} - fmt.write_str(self.name()) - }} -}} - -"#, - ).unwrap(); -} - fn make_impl(w: &mut BufWriter, types: &BTreeMap) { write!(w, -"impl Type {{ - /// Returns the `Type` corresponding to the provided `Oid` if it - /// corresponds to a built-in type. - pub fn from_oid(oid: Oid) -> Option {{ +"impl Inner {{ + pub fn from_oid(oid: Oid) -> Option {{ match oid {{ ", ).unwrap(); @@ -190,7 +174,7 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { for (oid, type_) in types { write!( w, - " {} => Some(Type::{}), + " {} => Some(Inner::{}), ", oid, type_.variant @@ -202,7 +186,6 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { }} }} - /// Returns the OID of the `Type`. pub fn oid(&self) -> Oid {{ match *self {{ ", @@ -212,7 +195,7 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { for (oid, type_) in types { write!( w, - " Type::{} => {}, + " Inner::{} => {}, ", type_.variant, oid @@ -220,11 +203,10 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { } write!(w, -" Type::Other(ref u) => u.oid(), +" Inner::Other(ref u) => u.oid, }} }} - /// Returns the kind of this type. pub fn kind(&self) -> &Kind {{ match *self {{ ", @@ -233,14 +215,14 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { for type_ in types.values() { let kind = match type_.kind { "P" => "Pseudo".to_owned(), - "A" => format!("Array(Type::{})", types[&type_.element].variant), - "R" => format!("Range(Type::{})", types[&type_.element].variant), + "A" => format!("Array(Type(Inner::{}))", types[&type_.element].variant), + "R" => format!("Range(Type(Inner::{}))", types[&type_.element].variant), _ => "Simple".to_owned(), }; write!( w, - " Type::{} => {{ + " Inner::{} => {{ const V: &'static Kind = &Kind::{}; V }} @@ -251,19 +233,10 @@ fn make_impl(w: &mut BufWriter, types: &BTreeMap) { } write!(w, -r#" Type::Other(ref u) => u.kind(), +r#" Inner::Other(ref u) => &u.kind, }} }} - /// Returns the schema of this type. - pub fn schema(&self) -> &str {{ - match *self {{ - Type::Other(ref u) => u.schema(), - _ => "pg_catalog", - }} - }} - - /// Returns the name of this type. pub fn name(&self) -> &str {{ match *self {{ "#, @@ -272,7 +245,7 @@ r#" Type::Other(ref u) => u.kind(), for type_ in types.values() { write!( w, - r#" Type::{} => "{}", + r#" Inner::{} => "{}", "#, type_.variant, type_.name @@ -281,10 +254,34 @@ r#" Type::Other(ref u) => u.kind(), write!( w, - " Type::Other(ref u) => u.name(), + " Inner::Other(ref u) => &u.name, }} }} }} " ).unwrap(); } + +fn make_consts(w: &mut BufWriter, types: &BTreeMap) { + write!(w, +"pub mod consts {{ + use types::Type; + use types::type_gen::Inner; +", + ).unwrap(); + + for type_ in types.values() { + write!(w, +" + /// {docs} + pub const {ident}: Type = Type(Inner::{variant}); +", + docs = type_.doc, + ident = type_.ident, + variant = type_.variant).unwrap(); + } + + write!(w, +"}}" + ).unwrap(); +} diff --git a/postgres-shared/src/types/bit_vec.rs b/postgres-shared/src/types/bit_vec.rs index 4dd376e6..f3f11627 100644 --- a/postgres-shared/src/types/bit_vec.rs +++ b/postgres-shared/src/types/bit_vec.rs @@ -4,7 +4,7 @@ use postgres_protocol::types; use self::bit_vec::BitVec; use std::error::Error; -use types::{FromSql, ToSql, IsNull, Type}; +use types::{FromSql, ToSql, IsNull, Type, BIT, VARBIT}; impl FromSql for BitVec { fn from_sql(_: &Type, raw: &[u8]) -> Result> { @@ -17,7 +17,7 @@ impl FromSql for BitVec { Ok(bitvec) } - accepts!(Type::Bit, Type::Varbit); + accepts!(BIT, VARBIT); } impl ToSql for BitVec { @@ -26,6 +26,6 @@ impl ToSql for BitVec { Ok(IsNull::No) } - accepts!(Type::Bit, Type::Varbit); + accepts!(BIT, VARBIT); to_sql_checked!(); } diff --git a/postgres-shared/src/types/chrono.rs b/postgres-shared/src/types/chrono.rs index bc50de0d..dc7368c8 100644 --- a/postgres-shared/src/types/chrono.rs +++ b/postgres-shared/src/types/chrono.rs @@ -5,7 +5,7 @@ use self::chrono::{Duration, NaiveDate, NaiveTime, NaiveDateTime, DateTime, Utc, FixedOffset}; use std::error::Error; -use types::{FromSql, ToSql, IsNull, Type}; +use types::{FromSql, ToSql, IsNull, Type, TIMESTAMP, TIMESTAMPTZ, DATE, TIME}; fn base() -> NaiveDateTime { NaiveDate::from_ymd(2000, 1, 1).and_hms(0, 0, 0) @@ -17,7 +17,7 @@ impl FromSql for NaiveDateTime { Ok(base() + Duration::microseconds(t)) } - accepts!(Type::Timestamp); + accepts!(TIMESTAMP); } impl ToSql for NaiveDateTime { @@ -30,7 +30,7 @@ impl ToSql for NaiveDateTime { Ok(IsNull::No) } - accepts!(Type::Timestamp); + accepts!(TIMESTAMP); to_sql_checked!(); } @@ -40,7 +40,7 @@ impl FromSql for DateTime { Ok(DateTime::from_utc(naive, Utc)) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); } impl ToSql for DateTime { @@ -48,7 +48,7 @@ impl ToSql for DateTime { self.naive_utc().to_sql(type_, w) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); to_sql_checked!(); } @@ -58,7 +58,7 @@ impl FromSql for DateTime { Ok(utc.with_timezone(&Local)) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); } impl ToSql for DateTime { @@ -70,7 +70,7 @@ impl ToSql for DateTime { self.with_timezone(&Utc).to_sql(type_, w) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); to_sql_checked!(); } @@ -83,7 +83,7 @@ impl FromSql for DateTime { Ok(utc.with_timezone(&FixedOffset::east(0))) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); } impl ToSql for DateTime { @@ -91,7 +91,7 @@ impl ToSql for DateTime { self.with_timezone(&Utc).to_sql(type_, w) } - accepts!(Type::Timestamptz); + accepts!(TIMESTAMPTZ); to_sql_checked!(); } @@ -101,7 +101,7 @@ impl FromSql for NaiveDate { Ok(base().date() + Duration::days(jd as i64)) } - accepts!(Type::Date); + accepts!(DATE); } impl ToSql for NaiveDate { @@ -115,7 +115,7 @@ impl ToSql for NaiveDate { Ok(IsNull::No) } - accepts!(Type::Date); + accepts!(DATE); to_sql_checked!(); } @@ -125,7 +125,7 @@ impl FromSql for NaiveTime { Ok(NaiveTime::from_hms(0, 0, 0) + Duration::microseconds(usec)) } - accepts!(Type::Time); + accepts!(TIME); } impl ToSql for NaiveTime { @@ -139,6 +139,6 @@ impl ToSql for NaiveTime { Ok(IsNull::No) } - accepts!(Type::Time); + accepts!(TIME); to_sql_checked!(); } diff --git a/postgres-shared/src/types/eui48.rs b/postgres-shared/src/types/eui48.rs index 859be385..1ccbe689 100644 --- a/postgres-shared/src/types/eui48.rs +++ b/postgres-shared/src/types/eui48.rs @@ -4,7 +4,7 @@ use self::eui48::MacAddress; use std::error::Error; use postgres_protocol::types; -use types::{FromSql, ToSql, Type, IsNull}; +use types::{FromSql, ToSql, Type, IsNull, MACADDR}; impl FromSql for MacAddress { fn from_sql(_: &Type, raw: &[u8]) -> Result> { @@ -12,7 +12,7 @@ impl FromSql for MacAddress { Ok(MacAddress::new(bytes)) } - accepts!(Type::Macaddr); + accepts!(MACADDR); } impl ToSql for MacAddress { @@ -23,6 +23,6 @@ impl ToSql for MacAddress { Ok(IsNull::No) } - accepts!(Type::Macaddr); + accepts!(MACADDR); to_sql_checked!(); } diff --git a/postgres-shared/src/types/geo.rs b/postgres-shared/src/types/geo.rs index de7e6be4..de5353cc 100644 --- a/postgres-shared/src/types/geo.rs +++ b/postgres-shared/src/types/geo.rs @@ -5,7 +5,7 @@ use self::geo::{Bbox, LineString, Point}; use std::error::Error; use fallible_iterator::FallibleIterator; -use types::{FromSql, ToSql, IsNull, Type}; +use types::{FromSql, ToSql, IsNull, Type, POINT, BOX, PATH}; impl FromSql for Point { fn from_sql(_: &Type, raw: &[u8]) -> Result> { @@ -13,7 +13,7 @@ impl FromSql for Point { Ok(Point::new(point.x(), point.y())) } - accepts!(Type::Point); + accepts!(POINT); } impl ToSql for Point { @@ -22,7 +22,7 @@ impl ToSql for Point { Ok(IsNull::No) } - accepts!(Type::Point); + accepts!(POINT); to_sql_checked!(); } @@ -37,7 +37,7 @@ impl FromSql for Bbox { }) } - accepts!(Type::Box); + accepts!(BOX); } impl ToSql for Bbox { @@ -46,7 +46,7 @@ impl ToSql for Bbox { Ok(IsNull::No) } - accepts!(Type::Box); + accepts!(BOX); to_sql_checked!(); } @@ -57,7 +57,7 @@ impl FromSql for LineString { Ok(LineString(points)) } - accepts!(Type::Path); + accepts!(PATH); } impl ToSql for LineString { @@ -67,6 +67,6 @@ impl ToSql for LineString { Ok(IsNull::No) } - accepts!(Type::Path); + accepts!(PATH); to_sql_checked!(); } diff --git a/postgres-shared/src/types/mod.rs b/postgres-shared/src/types/mod.rs index 5ea91e82..99abc61f 100644 --- a/postgres-shared/src/types/mod.rs +++ b/postgres-shared/src/types/mod.rs @@ -6,11 +6,13 @@ use std::error::Error; use std::fmt; use std::sync::Arc; +use types::type_gen::{Inner, Other}; + #[doc(inline)] pub use postgres_protocol::Oid; -pub use self::type_gen::Type; -pub use self::special::{Date, Timestamp}; +pub use types::type_gen::consts::*; +pub use types::special::{Date, Timestamp}; /// Generates a simple implementation of `ToSql::accepts` which accepts the /// types passed to it. @@ -81,6 +83,62 @@ mod geo; mod special; mod type_gen; +/// A Postgres type. +#[derive(PartialEq, Eq, Clone, Debug)] +pub struct Type(Inner); + +impl fmt::Display for Type { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + match self.schema() { + "public" | "pg_catalog" => {} + schema => write!(fmt, "{}.", schema)?, + } + fmt.write_str(self.name()) + } +} + +impl Type { + // WARNING: this is not considered public API + #[doc(hidden)] + pub fn _new(name: String, oid: Oid, kind: Kind, schema: String) -> Type { + Type(Inner::Other(Arc::new(Other { + name: name, + oid: oid, + kind: kind, + schema: schema, + }))) + } + + /// Returns the `Type` corresponding to the provided `Oid` if it + /// corresponds to a built-in type. + pub fn from_oid(oid: Oid) -> Option { + Inner::from_oid(oid).map(Type) + } + + /// Returns the OID of the `Type`. + pub fn oid(&self) -> Oid { + self.0.oid() + } + + /// Returns the kind of this type. + pub fn kind(&self) -> &Kind { + self.0.kind() + } + + /// Returns the schema of this type. + pub fn schema(&self) -> &str { + match self.0 { + Inner::Other(ref u) => &u.schema, + _ => "pg_catalog", + } + } + + /// Returns the name of this type. + pub fn name(&self) -> &str { + self.0.name() + } +} + /// Represents the kind of a Postgres type. #[derive(Debug, Clone, PartialEq, Eq)] pub enum Kind { @@ -131,63 +189,6 @@ impl Field { } } -/// Information about an unknown type. -#[derive(PartialEq, Eq, Clone)] -pub struct Other(Arc); - -impl fmt::Debug for Other { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - fmt.debug_struct("Other") - .field("name", &self.0.name) - .field("oid", &self.0.oid) - .field("kind", &self.0.kind) - .field("schema", &self.0.schema) - .finish() - } -} - -#[derive(PartialEq, Eq)] -struct OtherInner { - name: String, - oid: Oid, - kind: Kind, - schema: String, -} - -impl Other { - #[doc(hidden)] - pub fn new(name: String, oid: Oid, kind: Kind, schema: String) -> Other { - Other(Arc::new(OtherInner { - name: name, - oid: oid, - kind: kind, - schema: schema, - })) - } -} - -impl Other { - /// The name of the type. - pub fn name(&self) -> &str { - &self.0.name - } - - /// The OID of this type. - pub fn oid(&self) -> Oid { - self.0.oid - } - - /// The kind of this type. - pub fn kind(&self) -> &Kind { - &self.0.kind - } - - /// The schema of this type. - pub fn schema(&self) -> &str { - &self.0.schema - } -} - /// An error indicating that a `NULL` Postgres value was passed to a `FromSql` /// implementation that does not support `NULL` values. #[derive(Debug, Clone, Copy)] @@ -365,7 +366,7 @@ impl FromSql for Vec { Ok(types::bytea_from_sql(raw).to_owned()) } - accepts!(Type::Bytea); + accepts!(BYTEA); } impl FromSql for String { @@ -375,8 +376,8 @@ impl FromSql for String { fn accepts(ty: &Type) -> bool { match *ty { - Type::Varchar | Type::Text | Type::Bpchar | Type::Name | Type::Unknown => true, - Type::Other(ref u) if u.name() == "citext" => true, + VARCHAR | TEXT | BPCHAR | NAME | UNKNOWN => true, + ref ty if ty.name() == "citext" => true, _ => false, } } @@ -396,14 +397,14 @@ macro_rules! simple_from { } } -simple_from!(bool, bool_from_sql, Type::Bool); -simple_from!(i8, char_from_sql, Type::Char); -simple_from!(i16, int2_from_sql, Type::Int2); -simple_from!(i32, int4_from_sql, Type::Int4); -simple_from!(u32, oid_from_sql, Type::Oid); -simple_from!(i64, int8_from_sql, Type::Int8); -simple_from!(f32, float4_from_sql, Type::Float4); -simple_from!(f64, float8_from_sql, Type::Float8); +simple_from!(bool, bool_from_sql, BOOL); +simple_from!(i8, char_from_sql, CHAR); +simple_from!(i16, int2_from_sql, INT2); +simple_from!(i32, int4_from_sql, INT4); +simple_from!(u32, oid_from_sql, OID); +simple_from!(i64, int8_from_sql, INT8); +simple_from!(f32, float4_from_sql, FLOAT4); +simple_from!(f64, float8_from_sql, FLOAT8); impl FromSql for HashMap> { fn from_sql( @@ -416,10 +417,7 @@ impl FromSql for HashMap> { } fn accepts(ty: &Type) -> bool { - match *ty { - Type::Other(ref u) if u.name() == "hstore" => true, - _ => false, - } + ty.name() == "hstore" } } @@ -589,7 +587,7 @@ impl<'a> ToSql for &'a [u8] { Ok(IsNull::No) } - accepts!(Type::Bytea); + accepts!(BYTEA); to_sql_checked!(); } @@ -626,8 +624,8 @@ impl<'a> ToSql for &'a str { fn accepts(ty: &Type) -> bool { match *ty { - Type::Varchar | Type::Text | Type::Bpchar | Type::Name => true, - Type::Other(ref u) if u.name() == "citext" => true, + VARCHAR | TEXT | BPCHAR | NAME | UNKNOWN => true, + ref ty if ty.name() == "citext" => true, _ => false, } } @@ -665,14 +663,14 @@ macro_rules! simple_to { } } -simple_to!(bool, bool_to_sql, Type::Bool); -simple_to!(i8, char_to_sql, Type::Char); -simple_to!(i16, int2_to_sql, Type::Int2); -simple_to!(i32, int4_to_sql, Type::Int4); -simple_to!(u32, oid_to_sql, Type::Oid); -simple_to!(i64, int8_to_sql, Type::Int8); -simple_to!(f32, float4_to_sql, Type::Float4); -simple_to!(f64, float8_to_sql, Type::Float8); +simple_to!(bool, bool_to_sql, BOOL); +simple_to!(i8, char_to_sql, CHAR); +simple_to!(i16, int2_to_sql, INT2); +simple_to!(i32, int4_to_sql, INT4); +simple_to!(u32, oid_to_sql, OID); +simple_to!(i64, int8_to_sql, INT8); +simple_to!(f32, float4_to_sql, FLOAT4); +simple_to!(f64, float8_to_sql, FLOAT8); impl ToSql for HashMap> { fn to_sql(&self, _: &Type, w: &mut Vec) -> Result> { @@ -684,10 +682,7 @@ impl ToSql for HashMap> { } fn accepts(ty: &Type) -> bool { - match *ty { - Type::Other(ref u) if u.name() == "hstore" => true, - _ => false, - } + ty.name() == "hstore" } to_sql_checked!(); diff --git a/postgres-shared/src/types/rustc_serialize.rs b/postgres-shared/src/types/rustc_serialize.rs index b0eea463..3790c7a9 100644 --- a/postgres-shared/src/types/rustc_serialize.rs +++ b/postgres-shared/src/types/rustc_serialize.rs @@ -4,11 +4,11 @@ use self::rustc_serialize::json; use std::io::{Read, Write}; use std::error::Error; -use types::{FromSql, ToSql, IsNull, Type}; +use types::{FromSql, ToSql, IsNull, Type, JSON, JSONB}; impl FromSql for json::Json { fn from_sql(ty: &Type, mut raw: &[u8]) -> Result> { - if let Type::Jsonb = *ty { + if *ty == JSONB { let mut b = [0; 1]; raw.read_exact(&mut b)?; // We only support version 1 of the jsonb binary format @@ -19,18 +19,18 @@ impl FromSql for json::Json { json::Json::from_reader(&mut raw).map_err(Into::into) } - accepts!(Type::Json, Type::Jsonb); + accepts!(JSON, JSONB); } impl ToSql for json::Json { fn to_sql(&self, ty: &Type, mut out: &mut Vec) -> Result> { - if let Type::Jsonb = *ty { + if *ty == JSONB { out.push(1); } write!(out, "{}", self)?; Ok(IsNull::No) } - accepts!(Type::Json, Type::Jsonb); + accepts!(JSON, JSONB); to_sql_checked!(); } diff --git a/postgres-shared/src/types/serde_json.rs b/postgres-shared/src/types/serde_json.rs index 5bdad893..10f880ad 100644 --- a/postgres-shared/src/types/serde_json.rs +++ b/postgres-shared/src/types/serde_json.rs @@ -4,11 +4,11 @@ use self::serde_json::Value; use std::error::Error; use std::io::{Read, Write}; -use types::{FromSql, ToSql, IsNull, Type}; +use types::{FromSql, ToSql, IsNull, Type, JSON, JSONB}; impl FromSql for Value { fn from_sql(ty: &Type, mut raw: &[u8]) -> Result> { - if let Type::Jsonb = *ty { + if *ty == JSONB { let mut b = [0; 1]; raw.read_exact(&mut b)?; // We only support version 1 of the jsonb binary format @@ -19,18 +19,18 @@ impl FromSql for Value { serde_json::de::from_reader(raw).map_err(Into::into) } - accepts!(Type::Json, Type::Jsonb); + accepts!(JSON, JSONB); } impl ToSql for Value { fn to_sql(&self, ty: &Type, mut out: &mut Vec) -> Result> { - if let Type::Jsonb = *ty { + if *ty == JSONB { out.push(1); } write!(out, "{}", self)?; Ok(IsNull::No) } - accepts!(Type::Json, Type::Jsonb); + accepts!(JSON, JSONB); to_sql_checked!(); } diff --git a/postgres-shared/src/types/special.rs b/postgres-shared/src/types/special.rs index 5e8c45fb..a7e14de9 100644 --- a/postgres-shared/src/types/special.rs +++ b/postgres-shared/src/types/special.rs @@ -2,7 +2,7 @@ use postgres_protocol::types; use std::{i32, i64}; use std::error::Error; -use types::{Type, FromSql, ToSql, IsNull}; +use types::{Type, FromSql, ToSql, IsNull, DATE, TIMESTAMP, TIMESTAMPTZ}; /// A wrapper that can be used to represent infinity with `Type::Date` types. #[derive(Debug, Clone, Copy, PartialEq)] @@ -25,7 +25,7 @@ impl FromSql for Date { } fn accepts(ty: &Type) -> bool { - *ty == Type::Date && T::accepts(ty) + *ty == DATE && T::accepts(ty) } } impl ToSql for Date { @@ -41,7 +41,7 @@ impl ToSql for Date { } fn accepts(ty: &Type) -> bool { - *ty == Type::Date && T::accepts(ty) + *ty == DATE && T::accepts(ty) } to_sql_checked!(); @@ -69,7 +69,10 @@ impl FromSql for Timestamp { } fn accepts(ty: &Type) -> bool { - (*ty == Type::Timestamp || *ty == Type::Timestamptz) && T::accepts(ty) + match *ty { + TIMESTAMP | TIMESTAMPTZ if T::accepts(ty) => true, + _ => false + } } } @@ -86,7 +89,10 @@ impl ToSql for Timestamp { } fn accepts(ty: &Type) -> bool { - (*ty == Type::Timestamp || *ty == Type::Timestamptz) && T::accepts(ty) + match *ty { + TIMESTAMP | TIMESTAMPTZ if T::accepts(ty) => true, + _ => false + } } to_sql_checked!(); diff --git a/postgres-shared/src/types/time.rs b/postgres-shared/src/types/time.rs index 6835e5a2..e6b43043 100644 --- a/postgres-shared/src/types/time.rs +++ b/postgres-shared/src/types/time.rs @@ -4,7 +4,7 @@ use self::time::Timespec; use std::error::Error; use postgres_protocol::types; -use types::{Type, FromSql, ToSql, IsNull}; +use types::{Type, FromSql, ToSql, IsNull, TIMESTAMP, TIMESTAMPTZ}; const USEC_PER_SEC: i64 = 1_000_000; const NSEC_PER_USEC: i64 = 1_000; @@ -26,7 +26,7 @@ impl FromSql for Timespec { Ok(Timespec::new(sec, (usec * NSEC_PER_USEC) as i32)) } - accepts!(Type::Timestamp, Type::Timestamptz); + accepts!(TIMESTAMP, TIMESTAMPTZ); } impl ToSql for Timespec { @@ -36,6 +36,6 @@ impl ToSql for Timespec { Ok(IsNull::No) } - accepts!(Type::Timestamp, Type::Timestamptz); + accepts!(TIMESTAMP, TIMESTAMPTZ); to_sql_checked!(); } diff --git a/postgres-shared/src/types/type_gen.rs b/postgres-shared/src/types/type_gen.rs index 241c64c3..4aaa8dfc 100644 --- a/postgres-shared/src/types/type_gen.rs +++ b/postgres-shared/src/types/type_gen.rs @@ -1,1527 +1,1840 @@ // Autogenerated file - DO NOT EDIT -use std::fmt; +use std::sync::Arc; -use types::{Oid, Kind, Other}; +use types::{Type, Oid, Kind}; + +#[derive(PartialEq, Eq, Debug)] +pub struct Other { + pub name: String, + pub oid: Oid, + pub kind: Kind, + pub schema: String, +} -/// A Postgres type. #[derive(PartialEq, Eq, Clone, Debug)] -pub enum Type { - /// BOOL - boolean, 'true'/'false' +pub enum Inner { Bool, - /// BYTEA - variable-length string, binary values escaped Bytea, - /// CHAR - single character Char, - /// NAME - 63-byte type for storing system identifiers Name, - /// INT8 - ~18 digit integer, 8-byte storage Int8, - /// INT2 - -32 thousand to 32 thousand, 2-byte storage Int2, - /// INT2VECTOR - array of int2, used in system tables Int2Vector, - /// INT4 - -2 billion to 2 billion integer, 4-byte storage Int4, - /// REGPROC - registered procedure Regproc, - /// TEXT - variable-length string, no limit specified Text, - /// OID - object identifier(oid), maximum 4 billion Oid, - /// TID - (block, offset), physical location of tuple Tid, - /// XID - transaction id Xid, - /// CID - command identifier type, sequence in transaction id Cid, - /// OIDVECTOR - array of oids, used in system tables OidVector, - /// PG_DDL_COMMAND - internal type for passing CollectedCommand PgDdlCommand, - /// JSON Json, - /// XML - XML content Xml, - /// XML[] XmlArray, - /// PG_NODE_TREE - string representing an internal node tree PgNodeTree, - /// JSON[] JsonArray, - /// SMGR - storage manager Smgr, - /// INDEX_AM_HANDLER IndexAmHandler, - /// POINT - geometric point '(x, y)' Point, - /// LSEG - geometric line segment '(pt1,pt2)' Lseg, - /// PATH - geometric path '(pt1,...)' Path, - /// BOX - geometric box '(lower left,upper right)' Box, - /// POLYGON - geometric polygon '(pt1,...)' Polygon, - /// LINE - geometric line Line, - /// LINE[] LineArray, - /// CIDR - network IP address/netmask, network address Cidr, - /// CIDR[] CidrArray, - /// FLOAT4 - single-precision floating point number, 4-byte storage Float4, - /// FLOAT8 - double-precision floating point number, 8-byte storage Float8, - /// ABSTIME - absolute, limited-range date and time (Unix system time) Abstime, - /// RELTIME - relative, limited-range time interval (Unix delta time) Reltime, - /// TINTERVAL - (abstime,abstime), time interval Tinterval, - /// UNKNOWN Unknown, - /// CIRCLE - geometric circle '(center,radius)' Circle, - /// CIRCLE[] CircleArray, - /// MACADDR8 - XX:XX:XX:XX:XX:XX:XX:XX, MAC address Macaddr8, - /// MACADDR8[] Macaddr8Array, - /// MONEY - monetary amounts, $d,ddd.cc Money, - /// MONEY[] MoneyArray, - /// MACADDR - XX:XX:XX:XX:XX:XX, MAC address Macaddr, - /// INET - IP address/netmask, host address, netmask optional Inet, - /// BOOL[] BoolArray, - /// BYTEA[] ByteaArray, - /// CHAR[] CharArray, - /// NAME[] NameArray, - /// INT2[] Int2Array, - /// INT2VECTOR[] Int2VectorArray, - /// INT4[] Int4Array, - /// REGPROC[] RegprocArray, - /// TEXT[] TextArray, - /// TID[] TidArray, - /// XID[] XidArray, - /// CID[] CidArray, - /// OIDVECTOR[] OidVectorArray, - /// BPCHAR[] BpcharArray, - /// VARCHAR[] VarcharArray, - /// INT8[] Int8Array, - /// POINT[] PointArray, - /// LSEG[] LsegArray, - /// PATH[] PathArray, - /// BOX[] BoxArray, - /// FLOAT4[] Float4Array, - /// FLOAT8[] Float8Array, - /// ABSTIME[] AbstimeArray, - /// RELTIME[] ReltimeArray, - /// TINTERVAL[] TintervalArray, - /// POLYGON[] PolygonArray, - /// OID[] OidArray, - /// ACLITEM - access control list Aclitem, - /// ACLITEM[] AclitemArray, - /// MACADDR[] MacaddrArray, - /// INET[] InetArray, - /// BPCHAR - char(length), blank-padded string, fixed storage length Bpchar, - /// VARCHAR - varchar(length), non-blank-padded string, variable storage length Varchar, - /// DATE - date Date, - /// TIME - time of day Time, - /// TIMESTAMP - date and time Timestamp, - /// TIMESTAMP[] TimestampArray, - /// DATE[] DateArray, - /// TIME[] TimeArray, - /// TIMESTAMPTZ - date and time with time zone Timestamptz, - /// TIMESTAMPTZ[] TimestamptzArray, - /// INTERVAL - @ <number> <units>, time interval Interval, - /// INTERVAL[] IntervalArray, - /// NUMERIC[] NumericArray, - /// CSTRING[] CstringArray, - /// TIMETZ - time of day with time zone Timetz, - /// TIMETZ[] TimetzArray, - /// BIT - fixed-length bit string Bit, - /// BIT[] BitArray, - /// VARBIT - variable-length bit string Varbit, - /// VARBIT[] VarbitArray, - /// NUMERIC - numeric(precision, decimal), arbitrary precision number Numeric, - /// REFCURSOR - reference to cursor (portal name) Refcursor, - /// REFCURSOR[] RefcursorArray, - /// REGPROCEDURE - registered procedure (with args) Regprocedure, - /// REGOPER - registered operator Regoper, - /// REGOPERATOR - registered operator (with args) Regoperator, - /// REGCLASS - registered class Regclass, - /// REGTYPE - registered type Regtype, - /// REGPROCEDURE[] RegprocedureArray, - /// REGOPER[] RegoperArray, - /// REGOPERATOR[] RegoperatorArray, - /// REGCLASS[] RegclassArray, - /// REGTYPE[] RegtypeArray, - /// RECORD Record, - /// CSTRING Cstring, - /// ANY Any, - /// ANYARRAY - AnyArray, - /// VOID + Anyarray, Void, - /// TRIGGER Trigger, - /// LANGUAGE_HANDLER LanguageHandler, - /// INTERNAL Internal, - /// OPAQUE Opaque, - /// ANYELEMENT Anyelement, - /// RECORD[] RecordArray, - /// ANYNONARRAY Anynonarray, - /// TXID_SNAPSHOT[] TxidSnapshotArray, - /// UUID - UUID datatype Uuid, - /// UUID[] UuidArray, - /// TXID_SNAPSHOT - txid snapshot TxidSnapshot, - /// FDW_HANDLER FdwHandler, - /// PG_LSN - PostgreSQL LSN datatype PgLsn, - /// PG_LSN[] PgLsnArray, - /// TSM_HANDLER TsmHandler, - /// PG_NDISTINCT - multivariate ndistinct coefficients PgNdistinct, - /// PG_DEPENDENCIES - multivariate dependencies PgDependencies, - /// ANYENUM Anyenum, - /// TSVECTOR - text representation for text search TsVector, - /// TSQUERY - query representation for text search Tsquery, - /// GTSVECTOR - GiST index internal text representation for text search GtsVector, - /// TSVECTOR[] TsVectorArray, - /// GTSVECTOR[] GtsVectorArray, - /// TSQUERY[] TsqueryArray, - /// REGCONFIG - registered text search configuration Regconfig, - /// REGCONFIG[] RegconfigArray, - /// REGDICTIONARY - registered text search dictionary Regdictionary, - /// REGDICTIONARY[] RegdictionaryArray, - /// JSONB - Binary JSON Jsonb, - /// JSONB[] JsonbArray, - /// ANYRANGE AnyRange, - /// EVENT_TRIGGER EventTrigger, - /// INT4RANGE - range of integers Int4Range, - /// INT4RANGE[] Int4RangeArray, - /// NUMRANGE - range of numerics NumRange, - /// NUMRANGE[] NumRangeArray, - /// TSRANGE - range of timestamps without time zone TsRange, - /// TSRANGE[] TsRangeArray, - /// TSTZRANGE - range of timestamps with time zone TstzRange, - /// TSTZRANGE[] TstzRangeArray, - /// DATERANGE - range of dates DateRange, - /// DATERANGE[] DateRangeArray, - /// INT8RANGE - range of bigints Int8Range, - /// INT8RANGE[] Int8RangeArray, - /// REGNAMESPACE - registered namespace Regnamespace, - /// REGNAMESPACE[] RegnamespaceArray, - /// REGROLE - registered role Regrole, - /// REGROLE[] RegroleArray, - /// An unknown type. - Other(Other), + Other(Arc), } -impl fmt::Display for Type { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match self.schema() { - "public" | "pg_catalog" => {} - schema => write!(fmt, "{}.", schema)?, - } - fmt.write_str(self.name()) - } -} - -impl Type { - /// Returns the `Type` corresponding to the provided `Oid` if it - /// corresponds to a built-in type. - pub fn from_oid(oid: Oid) -> Option { +impl Inner { + pub fn from_oid(oid: Oid) -> Option { match oid { - 16 => Some(Type::Bool), - 17 => Some(Type::Bytea), - 18 => Some(Type::Char), - 19 => Some(Type::Name), - 20 => Some(Type::Int8), - 21 => Some(Type::Int2), - 22 => Some(Type::Int2Vector), - 23 => Some(Type::Int4), - 24 => Some(Type::Regproc), - 25 => Some(Type::Text), - 26 => Some(Type::Oid), - 27 => Some(Type::Tid), - 28 => Some(Type::Xid), - 29 => Some(Type::Cid), - 30 => Some(Type::OidVector), - 32 => Some(Type::PgDdlCommand), - 114 => Some(Type::Json), - 142 => Some(Type::Xml), - 143 => Some(Type::XmlArray), - 194 => Some(Type::PgNodeTree), - 199 => Some(Type::JsonArray), - 210 => Some(Type::Smgr), - 325 => Some(Type::IndexAmHandler), - 600 => Some(Type::Point), - 601 => Some(Type::Lseg), - 602 => Some(Type::Path), - 603 => Some(Type::Box), - 604 => Some(Type::Polygon), - 628 => Some(Type::Line), - 629 => Some(Type::LineArray), - 650 => Some(Type::Cidr), - 651 => Some(Type::CidrArray), - 700 => Some(Type::Float4), - 701 => Some(Type::Float8), - 702 => Some(Type::Abstime), - 703 => Some(Type::Reltime), - 704 => Some(Type::Tinterval), - 705 => Some(Type::Unknown), - 718 => Some(Type::Circle), - 719 => Some(Type::CircleArray), - 774 => Some(Type::Macaddr8), - 775 => Some(Type::Macaddr8Array), - 790 => Some(Type::Money), - 791 => Some(Type::MoneyArray), - 829 => Some(Type::Macaddr), - 869 => Some(Type::Inet), - 1000 => Some(Type::BoolArray), - 1001 => Some(Type::ByteaArray), - 1002 => Some(Type::CharArray), - 1003 => Some(Type::NameArray), - 1005 => Some(Type::Int2Array), - 1006 => Some(Type::Int2VectorArray), - 1007 => Some(Type::Int4Array), - 1008 => Some(Type::RegprocArray), - 1009 => Some(Type::TextArray), - 1010 => Some(Type::TidArray), - 1011 => Some(Type::XidArray), - 1012 => Some(Type::CidArray), - 1013 => Some(Type::OidVectorArray), - 1014 => Some(Type::BpcharArray), - 1015 => Some(Type::VarcharArray), - 1016 => Some(Type::Int8Array), - 1017 => Some(Type::PointArray), - 1018 => Some(Type::LsegArray), - 1019 => Some(Type::PathArray), - 1020 => Some(Type::BoxArray), - 1021 => Some(Type::Float4Array), - 1022 => Some(Type::Float8Array), - 1023 => Some(Type::AbstimeArray), - 1024 => Some(Type::ReltimeArray), - 1025 => Some(Type::TintervalArray), - 1027 => Some(Type::PolygonArray), - 1028 => Some(Type::OidArray), - 1033 => Some(Type::Aclitem), - 1034 => Some(Type::AclitemArray), - 1040 => Some(Type::MacaddrArray), - 1041 => Some(Type::InetArray), - 1042 => Some(Type::Bpchar), - 1043 => Some(Type::Varchar), - 1082 => Some(Type::Date), - 1083 => Some(Type::Time), - 1114 => Some(Type::Timestamp), - 1115 => Some(Type::TimestampArray), - 1182 => Some(Type::DateArray), - 1183 => Some(Type::TimeArray), - 1184 => Some(Type::Timestamptz), - 1185 => Some(Type::TimestamptzArray), - 1186 => Some(Type::Interval), - 1187 => Some(Type::IntervalArray), - 1231 => Some(Type::NumericArray), - 1263 => Some(Type::CstringArray), - 1266 => Some(Type::Timetz), - 1270 => Some(Type::TimetzArray), - 1560 => Some(Type::Bit), - 1561 => Some(Type::BitArray), - 1562 => Some(Type::Varbit), - 1563 => Some(Type::VarbitArray), - 1700 => Some(Type::Numeric), - 1790 => Some(Type::Refcursor), - 2201 => Some(Type::RefcursorArray), - 2202 => Some(Type::Regprocedure), - 2203 => Some(Type::Regoper), - 2204 => Some(Type::Regoperator), - 2205 => Some(Type::Regclass), - 2206 => Some(Type::Regtype), - 2207 => Some(Type::RegprocedureArray), - 2208 => Some(Type::RegoperArray), - 2209 => Some(Type::RegoperatorArray), - 2210 => Some(Type::RegclassArray), - 2211 => Some(Type::RegtypeArray), - 2249 => Some(Type::Record), - 2275 => Some(Type::Cstring), - 2276 => Some(Type::Any), - 2277 => Some(Type::AnyArray), - 2278 => Some(Type::Void), - 2279 => Some(Type::Trigger), - 2280 => Some(Type::LanguageHandler), - 2281 => Some(Type::Internal), - 2282 => Some(Type::Opaque), - 2283 => Some(Type::Anyelement), - 2287 => Some(Type::RecordArray), - 2776 => Some(Type::Anynonarray), - 2949 => Some(Type::TxidSnapshotArray), - 2950 => Some(Type::Uuid), - 2951 => Some(Type::UuidArray), - 2970 => Some(Type::TxidSnapshot), - 3115 => Some(Type::FdwHandler), - 3220 => Some(Type::PgLsn), - 3221 => Some(Type::PgLsnArray), - 3310 => Some(Type::TsmHandler), - 3361 => Some(Type::PgNdistinct), - 3402 => Some(Type::PgDependencies), - 3500 => Some(Type::Anyenum), - 3614 => Some(Type::TsVector), - 3615 => Some(Type::Tsquery), - 3642 => Some(Type::GtsVector), - 3643 => Some(Type::TsVectorArray), - 3644 => Some(Type::GtsVectorArray), - 3645 => Some(Type::TsqueryArray), - 3734 => Some(Type::Regconfig), - 3735 => Some(Type::RegconfigArray), - 3769 => Some(Type::Regdictionary), - 3770 => Some(Type::RegdictionaryArray), - 3802 => Some(Type::Jsonb), - 3807 => Some(Type::JsonbArray), - 3831 => Some(Type::AnyRange), - 3838 => Some(Type::EventTrigger), - 3904 => Some(Type::Int4Range), - 3905 => Some(Type::Int4RangeArray), - 3906 => Some(Type::NumRange), - 3907 => Some(Type::NumRangeArray), - 3908 => Some(Type::TsRange), - 3909 => Some(Type::TsRangeArray), - 3910 => Some(Type::TstzRange), - 3911 => Some(Type::TstzRangeArray), - 3912 => Some(Type::DateRange), - 3913 => Some(Type::DateRangeArray), - 3926 => Some(Type::Int8Range), - 3927 => Some(Type::Int8RangeArray), - 4089 => Some(Type::Regnamespace), - 4090 => Some(Type::RegnamespaceArray), - 4096 => Some(Type::Regrole), - 4097 => Some(Type::RegroleArray), + 16 => Some(Inner::Bool), + 17 => Some(Inner::Bytea), + 18 => Some(Inner::Char), + 19 => Some(Inner::Name), + 20 => Some(Inner::Int8), + 21 => Some(Inner::Int2), + 22 => Some(Inner::Int2Vector), + 23 => Some(Inner::Int4), + 24 => Some(Inner::Regproc), + 25 => Some(Inner::Text), + 26 => Some(Inner::Oid), + 27 => Some(Inner::Tid), + 28 => Some(Inner::Xid), + 29 => Some(Inner::Cid), + 30 => Some(Inner::OidVector), + 32 => Some(Inner::PgDdlCommand), + 114 => Some(Inner::Json), + 142 => Some(Inner::Xml), + 143 => Some(Inner::XmlArray), + 194 => Some(Inner::PgNodeTree), + 199 => Some(Inner::JsonArray), + 210 => Some(Inner::Smgr), + 325 => Some(Inner::IndexAmHandler), + 600 => Some(Inner::Point), + 601 => Some(Inner::Lseg), + 602 => Some(Inner::Path), + 603 => Some(Inner::Box), + 604 => Some(Inner::Polygon), + 628 => Some(Inner::Line), + 629 => Some(Inner::LineArray), + 650 => Some(Inner::Cidr), + 651 => Some(Inner::CidrArray), + 700 => Some(Inner::Float4), + 701 => Some(Inner::Float8), + 702 => Some(Inner::Abstime), + 703 => Some(Inner::Reltime), + 704 => Some(Inner::Tinterval), + 705 => Some(Inner::Unknown), + 718 => Some(Inner::Circle), + 719 => Some(Inner::CircleArray), + 774 => Some(Inner::Macaddr8), + 775 => Some(Inner::Macaddr8Array), + 790 => Some(Inner::Money), + 791 => Some(Inner::MoneyArray), + 829 => Some(Inner::Macaddr), + 869 => Some(Inner::Inet), + 1000 => Some(Inner::BoolArray), + 1001 => Some(Inner::ByteaArray), + 1002 => Some(Inner::CharArray), + 1003 => Some(Inner::NameArray), + 1005 => Some(Inner::Int2Array), + 1006 => Some(Inner::Int2VectorArray), + 1007 => Some(Inner::Int4Array), + 1008 => Some(Inner::RegprocArray), + 1009 => Some(Inner::TextArray), + 1010 => Some(Inner::TidArray), + 1011 => Some(Inner::XidArray), + 1012 => Some(Inner::CidArray), + 1013 => Some(Inner::OidVectorArray), + 1014 => Some(Inner::BpcharArray), + 1015 => Some(Inner::VarcharArray), + 1016 => Some(Inner::Int8Array), + 1017 => Some(Inner::PointArray), + 1018 => Some(Inner::LsegArray), + 1019 => Some(Inner::PathArray), + 1020 => Some(Inner::BoxArray), + 1021 => Some(Inner::Float4Array), + 1022 => Some(Inner::Float8Array), + 1023 => Some(Inner::AbstimeArray), + 1024 => Some(Inner::ReltimeArray), + 1025 => Some(Inner::TintervalArray), + 1027 => Some(Inner::PolygonArray), + 1028 => Some(Inner::OidArray), + 1033 => Some(Inner::Aclitem), + 1034 => Some(Inner::AclitemArray), + 1040 => Some(Inner::MacaddrArray), + 1041 => Some(Inner::InetArray), + 1042 => Some(Inner::Bpchar), + 1043 => Some(Inner::Varchar), + 1082 => Some(Inner::Date), + 1083 => Some(Inner::Time), + 1114 => Some(Inner::Timestamp), + 1115 => Some(Inner::TimestampArray), + 1182 => Some(Inner::DateArray), + 1183 => Some(Inner::TimeArray), + 1184 => Some(Inner::Timestamptz), + 1185 => Some(Inner::TimestamptzArray), + 1186 => Some(Inner::Interval), + 1187 => Some(Inner::IntervalArray), + 1231 => Some(Inner::NumericArray), + 1263 => Some(Inner::CstringArray), + 1266 => Some(Inner::Timetz), + 1270 => Some(Inner::TimetzArray), + 1560 => Some(Inner::Bit), + 1561 => Some(Inner::BitArray), + 1562 => Some(Inner::Varbit), + 1563 => Some(Inner::VarbitArray), + 1700 => Some(Inner::Numeric), + 1790 => Some(Inner::Refcursor), + 2201 => Some(Inner::RefcursorArray), + 2202 => Some(Inner::Regprocedure), + 2203 => Some(Inner::Regoper), + 2204 => Some(Inner::Regoperator), + 2205 => Some(Inner::Regclass), + 2206 => Some(Inner::Regtype), + 2207 => Some(Inner::RegprocedureArray), + 2208 => Some(Inner::RegoperArray), + 2209 => Some(Inner::RegoperatorArray), + 2210 => Some(Inner::RegclassArray), + 2211 => Some(Inner::RegtypeArray), + 2249 => Some(Inner::Record), + 2275 => Some(Inner::Cstring), + 2276 => Some(Inner::Any), + 2277 => Some(Inner::Anyarray), + 2278 => Some(Inner::Void), + 2279 => Some(Inner::Trigger), + 2280 => Some(Inner::LanguageHandler), + 2281 => Some(Inner::Internal), + 2282 => Some(Inner::Opaque), + 2283 => Some(Inner::Anyelement), + 2287 => Some(Inner::RecordArray), + 2776 => Some(Inner::Anynonarray), + 2949 => Some(Inner::TxidSnapshotArray), + 2950 => Some(Inner::Uuid), + 2951 => Some(Inner::UuidArray), + 2970 => Some(Inner::TxidSnapshot), + 3115 => Some(Inner::FdwHandler), + 3220 => Some(Inner::PgLsn), + 3221 => Some(Inner::PgLsnArray), + 3310 => Some(Inner::TsmHandler), + 3361 => Some(Inner::PgNdistinct), + 3402 => Some(Inner::PgDependencies), + 3500 => Some(Inner::Anyenum), + 3614 => Some(Inner::TsVector), + 3615 => Some(Inner::Tsquery), + 3642 => Some(Inner::GtsVector), + 3643 => Some(Inner::TsVectorArray), + 3644 => Some(Inner::GtsVectorArray), + 3645 => Some(Inner::TsqueryArray), + 3734 => Some(Inner::Regconfig), + 3735 => Some(Inner::RegconfigArray), + 3769 => Some(Inner::Regdictionary), + 3770 => Some(Inner::RegdictionaryArray), + 3802 => Some(Inner::Jsonb), + 3807 => Some(Inner::JsonbArray), + 3831 => Some(Inner::AnyRange), + 3838 => Some(Inner::EventTrigger), + 3904 => Some(Inner::Int4Range), + 3905 => Some(Inner::Int4RangeArray), + 3906 => Some(Inner::NumRange), + 3907 => Some(Inner::NumRangeArray), + 3908 => Some(Inner::TsRange), + 3909 => Some(Inner::TsRangeArray), + 3910 => Some(Inner::TstzRange), + 3911 => Some(Inner::TstzRangeArray), + 3912 => Some(Inner::DateRange), + 3913 => Some(Inner::DateRangeArray), + 3926 => Some(Inner::Int8Range), + 3927 => Some(Inner::Int8RangeArray), + 4089 => Some(Inner::Regnamespace), + 4090 => Some(Inner::RegnamespaceArray), + 4096 => Some(Inner::Regrole), + 4097 => Some(Inner::RegroleArray), _ => None, } } - /// Returns the OID of the `Type`. pub fn oid(&self) -> Oid { match *self { - Type::Bool => 16, - Type::Bytea => 17, - Type::Char => 18, - Type::Name => 19, - Type::Int8 => 20, - Type::Int2 => 21, - Type::Int2Vector => 22, - Type::Int4 => 23, - Type::Regproc => 24, - Type::Text => 25, - Type::Oid => 26, - Type::Tid => 27, - Type::Xid => 28, - Type::Cid => 29, - Type::OidVector => 30, - Type::PgDdlCommand => 32, - Type::Json => 114, - Type::Xml => 142, - Type::XmlArray => 143, - Type::PgNodeTree => 194, - Type::JsonArray => 199, - Type::Smgr => 210, - Type::IndexAmHandler => 325, - Type::Point => 600, - Type::Lseg => 601, - Type::Path => 602, - Type::Box => 603, - Type::Polygon => 604, - Type::Line => 628, - Type::LineArray => 629, - Type::Cidr => 650, - Type::CidrArray => 651, - Type::Float4 => 700, - Type::Float8 => 701, - Type::Abstime => 702, - Type::Reltime => 703, - Type::Tinterval => 704, - Type::Unknown => 705, - Type::Circle => 718, - Type::CircleArray => 719, - Type::Macaddr8 => 774, - Type::Macaddr8Array => 775, - Type::Money => 790, - Type::MoneyArray => 791, - Type::Macaddr => 829, - Type::Inet => 869, - Type::BoolArray => 1000, - Type::ByteaArray => 1001, - Type::CharArray => 1002, - Type::NameArray => 1003, - Type::Int2Array => 1005, - Type::Int2VectorArray => 1006, - Type::Int4Array => 1007, - Type::RegprocArray => 1008, - Type::TextArray => 1009, - Type::TidArray => 1010, - Type::XidArray => 1011, - Type::CidArray => 1012, - Type::OidVectorArray => 1013, - Type::BpcharArray => 1014, - Type::VarcharArray => 1015, - Type::Int8Array => 1016, - Type::PointArray => 1017, - Type::LsegArray => 1018, - Type::PathArray => 1019, - Type::BoxArray => 1020, - Type::Float4Array => 1021, - Type::Float8Array => 1022, - Type::AbstimeArray => 1023, - Type::ReltimeArray => 1024, - Type::TintervalArray => 1025, - Type::PolygonArray => 1027, - Type::OidArray => 1028, - Type::Aclitem => 1033, - Type::AclitemArray => 1034, - Type::MacaddrArray => 1040, - Type::InetArray => 1041, - Type::Bpchar => 1042, - Type::Varchar => 1043, - Type::Date => 1082, - Type::Time => 1083, - Type::Timestamp => 1114, - Type::TimestampArray => 1115, - Type::DateArray => 1182, - Type::TimeArray => 1183, - Type::Timestamptz => 1184, - Type::TimestamptzArray => 1185, - Type::Interval => 1186, - Type::IntervalArray => 1187, - Type::NumericArray => 1231, - Type::CstringArray => 1263, - Type::Timetz => 1266, - Type::TimetzArray => 1270, - Type::Bit => 1560, - Type::BitArray => 1561, - Type::Varbit => 1562, - Type::VarbitArray => 1563, - Type::Numeric => 1700, - Type::Refcursor => 1790, - Type::RefcursorArray => 2201, - Type::Regprocedure => 2202, - Type::Regoper => 2203, - Type::Regoperator => 2204, - Type::Regclass => 2205, - Type::Regtype => 2206, - Type::RegprocedureArray => 2207, - Type::RegoperArray => 2208, - Type::RegoperatorArray => 2209, - Type::RegclassArray => 2210, - Type::RegtypeArray => 2211, - Type::Record => 2249, - Type::Cstring => 2275, - Type::Any => 2276, - Type::AnyArray => 2277, - Type::Void => 2278, - Type::Trigger => 2279, - Type::LanguageHandler => 2280, - Type::Internal => 2281, - Type::Opaque => 2282, - Type::Anyelement => 2283, - Type::RecordArray => 2287, - Type::Anynonarray => 2776, - Type::TxidSnapshotArray => 2949, - Type::Uuid => 2950, - Type::UuidArray => 2951, - Type::TxidSnapshot => 2970, - Type::FdwHandler => 3115, - Type::PgLsn => 3220, - Type::PgLsnArray => 3221, - Type::TsmHandler => 3310, - Type::PgNdistinct => 3361, - Type::PgDependencies => 3402, - Type::Anyenum => 3500, - Type::TsVector => 3614, - Type::Tsquery => 3615, - Type::GtsVector => 3642, - Type::TsVectorArray => 3643, - Type::GtsVectorArray => 3644, - Type::TsqueryArray => 3645, - Type::Regconfig => 3734, - Type::RegconfigArray => 3735, - Type::Regdictionary => 3769, - Type::RegdictionaryArray => 3770, - Type::Jsonb => 3802, - Type::JsonbArray => 3807, - Type::AnyRange => 3831, - Type::EventTrigger => 3838, - Type::Int4Range => 3904, - Type::Int4RangeArray => 3905, - Type::NumRange => 3906, - Type::NumRangeArray => 3907, - Type::TsRange => 3908, - Type::TsRangeArray => 3909, - Type::TstzRange => 3910, - Type::TstzRangeArray => 3911, - Type::DateRange => 3912, - Type::DateRangeArray => 3913, - Type::Int8Range => 3926, - Type::Int8RangeArray => 3927, - Type::Regnamespace => 4089, - Type::RegnamespaceArray => 4090, - Type::Regrole => 4096, - Type::RegroleArray => 4097, - Type::Other(ref u) => u.oid(), + Inner::Bool => 16, + Inner::Bytea => 17, + Inner::Char => 18, + Inner::Name => 19, + Inner::Int8 => 20, + Inner::Int2 => 21, + Inner::Int2Vector => 22, + Inner::Int4 => 23, + Inner::Regproc => 24, + Inner::Text => 25, + Inner::Oid => 26, + Inner::Tid => 27, + Inner::Xid => 28, + Inner::Cid => 29, + Inner::OidVector => 30, + Inner::PgDdlCommand => 32, + Inner::Json => 114, + Inner::Xml => 142, + Inner::XmlArray => 143, + Inner::PgNodeTree => 194, + Inner::JsonArray => 199, + Inner::Smgr => 210, + Inner::IndexAmHandler => 325, + Inner::Point => 600, + Inner::Lseg => 601, + Inner::Path => 602, + Inner::Box => 603, + Inner::Polygon => 604, + Inner::Line => 628, + Inner::LineArray => 629, + Inner::Cidr => 650, + Inner::CidrArray => 651, + Inner::Float4 => 700, + Inner::Float8 => 701, + Inner::Abstime => 702, + Inner::Reltime => 703, + Inner::Tinterval => 704, + Inner::Unknown => 705, + Inner::Circle => 718, + Inner::CircleArray => 719, + Inner::Macaddr8 => 774, + Inner::Macaddr8Array => 775, + Inner::Money => 790, + Inner::MoneyArray => 791, + Inner::Macaddr => 829, + Inner::Inet => 869, + Inner::BoolArray => 1000, + Inner::ByteaArray => 1001, + Inner::CharArray => 1002, + Inner::NameArray => 1003, + Inner::Int2Array => 1005, + Inner::Int2VectorArray => 1006, + Inner::Int4Array => 1007, + Inner::RegprocArray => 1008, + Inner::TextArray => 1009, + Inner::TidArray => 1010, + Inner::XidArray => 1011, + Inner::CidArray => 1012, + Inner::OidVectorArray => 1013, + Inner::BpcharArray => 1014, + Inner::VarcharArray => 1015, + Inner::Int8Array => 1016, + Inner::PointArray => 1017, + Inner::LsegArray => 1018, + Inner::PathArray => 1019, + Inner::BoxArray => 1020, + Inner::Float4Array => 1021, + Inner::Float8Array => 1022, + Inner::AbstimeArray => 1023, + Inner::ReltimeArray => 1024, + Inner::TintervalArray => 1025, + Inner::PolygonArray => 1027, + Inner::OidArray => 1028, + Inner::Aclitem => 1033, + Inner::AclitemArray => 1034, + Inner::MacaddrArray => 1040, + Inner::InetArray => 1041, + Inner::Bpchar => 1042, + Inner::Varchar => 1043, + Inner::Date => 1082, + Inner::Time => 1083, + Inner::Timestamp => 1114, + Inner::TimestampArray => 1115, + Inner::DateArray => 1182, + Inner::TimeArray => 1183, + Inner::Timestamptz => 1184, + Inner::TimestamptzArray => 1185, + Inner::Interval => 1186, + Inner::IntervalArray => 1187, + Inner::NumericArray => 1231, + Inner::CstringArray => 1263, + Inner::Timetz => 1266, + Inner::TimetzArray => 1270, + Inner::Bit => 1560, + Inner::BitArray => 1561, + Inner::Varbit => 1562, + Inner::VarbitArray => 1563, + Inner::Numeric => 1700, + Inner::Refcursor => 1790, + Inner::RefcursorArray => 2201, + Inner::Regprocedure => 2202, + Inner::Regoper => 2203, + Inner::Regoperator => 2204, + Inner::Regclass => 2205, + Inner::Regtype => 2206, + Inner::RegprocedureArray => 2207, + Inner::RegoperArray => 2208, + Inner::RegoperatorArray => 2209, + Inner::RegclassArray => 2210, + Inner::RegtypeArray => 2211, + Inner::Record => 2249, + Inner::Cstring => 2275, + Inner::Any => 2276, + Inner::Anyarray => 2277, + Inner::Void => 2278, + Inner::Trigger => 2279, + Inner::LanguageHandler => 2280, + Inner::Internal => 2281, + Inner::Opaque => 2282, + Inner::Anyelement => 2283, + Inner::RecordArray => 2287, + Inner::Anynonarray => 2776, + Inner::TxidSnapshotArray => 2949, + Inner::Uuid => 2950, + Inner::UuidArray => 2951, + Inner::TxidSnapshot => 2970, + Inner::FdwHandler => 3115, + Inner::PgLsn => 3220, + Inner::PgLsnArray => 3221, + Inner::TsmHandler => 3310, + Inner::PgNdistinct => 3361, + Inner::PgDependencies => 3402, + Inner::Anyenum => 3500, + Inner::TsVector => 3614, + Inner::Tsquery => 3615, + Inner::GtsVector => 3642, + Inner::TsVectorArray => 3643, + Inner::GtsVectorArray => 3644, + Inner::TsqueryArray => 3645, + Inner::Regconfig => 3734, + Inner::RegconfigArray => 3735, + Inner::Regdictionary => 3769, + Inner::RegdictionaryArray => 3770, + Inner::Jsonb => 3802, + Inner::JsonbArray => 3807, + Inner::AnyRange => 3831, + Inner::EventTrigger => 3838, + Inner::Int4Range => 3904, + Inner::Int4RangeArray => 3905, + Inner::NumRange => 3906, + Inner::NumRangeArray => 3907, + Inner::TsRange => 3908, + Inner::TsRangeArray => 3909, + Inner::TstzRange => 3910, + Inner::TstzRangeArray => 3911, + Inner::DateRange => 3912, + Inner::DateRangeArray => 3913, + Inner::Int8Range => 3926, + Inner::Int8RangeArray => 3927, + Inner::Regnamespace => 4089, + Inner::RegnamespaceArray => 4090, + Inner::Regrole => 4096, + Inner::RegroleArray => 4097, + Inner::Other(ref u) => u.oid, } } - /// Returns the kind of this type. pub fn kind(&self) -> &Kind { match *self { - Type::Bool => { + Inner::Bool => { const V: &'static Kind = &Kind::Simple; V } - Type::Bytea => { + Inner::Bytea => { const V: &'static Kind = &Kind::Simple; V } - Type::Char => { + Inner::Char => { const V: &'static Kind = &Kind::Simple; V } - Type::Name => { + Inner::Name => { const V: &'static Kind = &Kind::Simple; V } - Type::Int8 => { + Inner::Int8 => { const V: &'static Kind = &Kind::Simple; V } - Type::Int2 => { + Inner::Int2 => { const V: &'static Kind = &Kind::Simple; V } - Type::Int2Vector => { - const V: &'static Kind = &Kind::Array(Type::Int2); + Inner::Int2Vector => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int2)); V } - Type::Int4 => { + Inner::Int4 => { const V: &'static Kind = &Kind::Simple; V } - Type::Regproc => { + Inner::Regproc => { const V: &'static Kind = &Kind::Simple; V } - Type::Text => { + Inner::Text => { const V: &'static Kind = &Kind::Simple; V } - Type::Oid => { + Inner::Oid => { const V: &'static Kind = &Kind::Simple; V } - Type::Tid => { + Inner::Tid => { const V: &'static Kind = &Kind::Simple; V } - Type::Xid => { + Inner::Xid => { const V: &'static Kind = &Kind::Simple; V } - Type::Cid => { + Inner::Cid => { const V: &'static Kind = &Kind::Simple; V } - Type::OidVector => { - const V: &'static Kind = &Kind::Array(Type::Oid); + Inner::OidVector => { + const V: &'static Kind = &Kind::Array(Type(Inner::Oid)); V } - Type::PgDdlCommand => { + Inner::PgDdlCommand => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Json => { + Inner::Json => { const V: &'static Kind = &Kind::Simple; V } - Type::Xml => { + Inner::Xml => { const V: &'static Kind = &Kind::Simple; V } - Type::XmlArray => { - const V: &'static Kind = &Kind::Array(Type::Xml); + Inner::XmlArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Xml)); V } - Type::PgNodeTree => { + Inner::PgNodeTree => { const V: &'static Kind = &Kind::Simple; V } - Type::JsonArray => { - const V: &'static Kind = &Kind::Array(Type::Json); + Inner::JsonArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Json)); V } - Type::Smgr => { + Inner::Smgr => { const V: &'static Kind = &Kind::Simple; V } - Type::IndexAmHandler => { + Inner::IndexAmHandler => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Point => { + Inner::Point => { const V: &'static Kind = &Kind::Simple; V } - Type::Lseg => { + Inner::Lseg => { const V: &'static Kind = &Kind::Simple; V } - Type::Path => { + Inner::Path => { const V: &'static Kind = &Kind::Simple; V } - Type::Box => { + Inner::Box => { const V: &'static Kind = &Kind::Simple; V } - Type::Polygon => { + Inner::Polygon => { const V: &'static Kind = &Kind::Simple; V } - Type::Line => { + Inner::Line => { const V: &'static Kind = &Kind::Simple; V } - Type::LineArray => { - const V: &'static Kind = &Kind::Array(Type::Line); + Inner::LineArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Line)); V } - Type::Cidr => { + Inner::Cidr => { const V: &'static Kind = &Kind::Simple; V } - Type::CidrArray => { - const V: &'static Kind = &Kind::Array(Type::Cidr); + Inner::CidrArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Cidr)); V } - Type::Float4 => { + Inner::Float4 => { const V: &'static Kind = &Kind::Simple; V } - Type::Float8 => { + Inner::Float8 => { const V: &'static Kind = &Kind::Simple; V } - Type::Abstime => { + Inner::Abstime => { const V: &'static Kind = &Kind::Simple; V } - Type::Reltime => { + Inner::Reltime => { const V: &'static Kind = &Kind::Simple; V } - Type::Tinterval => { + Inner::Tinterval => { const V: &'static Kind = &Kind::Simple; V } - Type::Unknown => { + Inner::Unknown => { const V: &'static Kind = &Kind::Simple; V } - Type::Circle => { + Inner::Circle => { const V: &'static Kind = &Kind::Simple; V } - Type::CircleArray => { - const V: &'static Kind = &Kind::Array(Type::Circle); + Inner::CircleArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Circle)); V } - Type::Macaddr8 => { + Inner::Macaddr8 => { const V: &'static Kind = &Kind::Simple; V } - Type::Macaddr8Array => { - const V: &'static Kind = &Kind::Array(Type::Macaddr8); + Inner::Macaddr8Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Macaddr8)); V } - Type::Money => { + Inner::Money => { const V: &'static Kind = &Kind::Simple; V } - Type::MoneyArray => { - const V: &'static Kind = &Kind::Array(Type::Money); + Inner::MoneyArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Money)); V } - Type::Macaddr => { + Inner::Macaddr => { const V: &'static Kind = &Kind::Simple; V } - Type::Inet => { + Inner::Inet => { const V: &'static Kind = &Kind::Simple; V } - Type::BoolArray => { - const V: &'static Kind = &Kind::Array(Type::Bool); + Inner::BoolArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Bool)); V } - Type::ByteaArray => { - const V: &'static Kind = &Kind::Array(Type::Bytea); + Inner::ByteaArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Bytea)); V } - Type::CharArray => { - const V: &'static Kind = &Kind::Array(Type::Char); + Inner::CharArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Char)); V } - Type::NameArray => { - const V: &'static Kind = &Kind::Array(Type::Name); + Inner::NameArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Name)); V } - Type::Int2Array => { - const V: &'static Kind = &Kind::Array(Type::Int2); + Inner::Int2Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int2)); V } - Type::Int2VectorArray => { - const V: &'static Kind = &Kind::Array(Type::Int2Vector); + Inner::Int2VectorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int2Vector)); V } - Type::Int4Array => { - const V: &'static Kind = &Kind::Array(Type::Int4); + Inner::Int4Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int4)); V } - Type::RegprocArray => { - const V: &'static Kind = &Kind::Array(Type::Regproc); + Inner::RegprocArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regproc)); V } - Type::TextArray => { - const V: &'static Kind = &Kind::Array(Type::Text); + Inner::TextArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Text)); V } - Type::TidArray => { - const V: &'static Kind = &Kind::Array(Type::Tid); + Inner::TidArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Tid)); V } - Type::XidArray => { - const V: &'static Kind = &Kind::Array(Type::Xid); + Inner::XidArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Xid)); V } - Type::CidArray => { - const V: &'static Kind = &Kind::Array(Type::Cid); + Inner::CidArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Cid)); V } - Type::OidVectorArray => { - const V: &'static Kind = &Kind::Array(Type::OidVector); + Inner::OidVectorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::OidVector)); V } - Type::BpcharArray => { - const V: &'static Kind = &Kind::Array(Type::Bpchar); + Inner::BpcharArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Bpchar)); V } - Type::VarcharArray => { - const V: &'static Kind = &Kind::Array(Type::Varchar); + Inner::VarcharArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Varchar)); V } - Type::Int8Array => { - const V: &'static Kind = &Kind::Array(Type::Int8); + Inner::Int8Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int8)); V } - Type::PointArray => { - const V: &'static Kind = &Kind::Array(Type::Point); + Inner::PointArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Point)); V } - Type::LsegArray => { - const V: &'static Kind = &Kind::Array(Type::Lseg); + Inner::LsegArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Lseg)); V } - Type::PathArray => { - const V: &'static Kind = &Kind::Array(Type::Path); + Inner::PathArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Path)); V } - Type::BoxArray => { - const V: &'static Kind = &Kind::Array(Type::Box); + Inner::BoxArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Box)); V } - Type::Float4Array => { - const V: &'static Kind = &Kind::Array(Type::Float4); + Inner::Float4Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Float4)); V } - Type::Float8Array => { - const V: &'static Kind = &Kind::Array(Type::Float8); + Inner::Float8Array => { + const V: &'static Kind = &Kind::Array(Type(Inner::Float8)); V } - Type::AbstimeArray => { - const V: &'static Kind = &Kind::Array(Type::Abstime); + Inner::AbstimeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Abstime)); V } - Type::ReltimeArray => { - const V: &'static Kind = &Kind::Array(Type::Reltime); + Inner::ReltimeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Reltime)); V } - Type::TintervalArray => { - const V: &'static Kind = &Kind::Array(Type::Tinterval); + Inner::TintervalArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Tinterval)); V } - Type::PolygonArray => { - const V: &'static Kind = &Kind::Array(Type::Polygon); + Inner::PolygonArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Polygon)); V } - Type::OidArray => { - const V: &'static Kind = &Kind::Array(Type::Oid); + Inner::OidArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Oid)); V } - Type::Aclitem => { + Inner::Aclitem => { const V: &'static Kind = &Kind::Simple; V } - Type::AclitemArray => { - const V: &'static Kind = &Kind::Array(Type::Aclitem); + Inner::AclitemArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Aclitem)); V } - Type::MacaddrArray => { - const V: &'static Kind = &Kind::Array(Type::Macaddr); + Inner::MacaddrArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Macaddr)); V } - Type::InetArray => { - const V: &'static Kind = &Kind::Array(Type::Inet); + Inner::InetArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Inet)); V } - Type::Bpchar => { + Inner::Bpchar => { const V: &'static Kind = &Kind::Simple; V } - Type::Varchar => { + Inner::Varchar => { const V: &'static Kind = &Kind::Simple; V } - Type::Date => { + Inner::Date => { const V: &'static Kind = &Kind::Simple; V } - Type::Time => { + Inner::Time => { const V: &'static Kind = &Kind::Simple; V } - Type::Timestamp => { + Inner::Timestamp => { const V: &'static Kind = &Kind::Simple; V } - Type::TimestampArray => { - const V: &'static Kind = &Kind::Array(Type::Timestamp); + Inner::TimestampArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Timestamp)); V } - Type::DateArray => { - const V: &'static Kind = &Kind::Array(Type::Date); + Inner::DateArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Date)); V } - Type::TimeArray => { - const V: &'static Kind = &Kind::Array(Type::Time); + Inner::TimeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Time)); V } - Type::Timestamptz => { + Inner::Timestamptz => { const V: &'static Kind = &Kind::Simple; V } - Type::TimestamptzArray => { - const V: &'static Kind = &Kind::Array(Type::Timestamptz); + Inner::TimestamptzArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Timestamptz)); V } - Type::Interval => { + Inner::Interval => { const V: &'static Kind = &Kind::Simple; V } - Type::IntervalArray => { - const V: &'static Kind = &Kind::Array(Type::Interval); + Inner::IntervalArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Interval)); V } - Type::NumericArray => { - const V: &'static Kind = &Kind::Array(Type::Numeric); + Inner::NumericArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Numeric)); V } - Type::CstringArray => { - const V: &'static Kind = &Kind::Array(Type::Cstring); + Inner::CstringArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Cstring)); V } - Type::Timetz => { + Inner::Timetz => { const V: &'static Kind = &Kind::Simple; V } - Type::TimetzArray => { - const V: &'static Kind = &Kind::Array(Type::Timetz); + Inner::TimetzArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Timetz)); V } - Type::Bit => { + Inner::Bit => { const V: &'static Kind = &Kind::Simple; V } - Type::BitArray => { - const V: &'static Kind = &Kind::Array(Type::Bit); + Inner::BitArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Bit)); V } - Type::Varbit => { + Inner::Varbit => { const V: &'static Kind = &Kind::Simple; V } - Type::VarbitArray => { - const V: &'static Kind = &Kind::Array(Type::Varbit); + Inner::VarbitArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Varbit)); V } - Type::Numeric => { + Inner::Numeric => { const V: &'static Kind = &Kind::Simple; V } - Type::Refcursor => { + Inner::Refcursor => { const V: &'static Kind = &Kind::Simple; V } - Type::RefcursorArray => { - const V: &'static Kind = &Kind::Array(Type::Refcursor); + Inner::RefcursorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Refcursor)); V } - Type::Regprocedure => { + Inner::Regprocedure => { const V: &'static Kind = &Kind::Simple; V } - Type::Regoper => { + Inner::Regoper => { const V: &'static Kind = &Kind::Simple; V } - Type::Regoperator => { + Inner::Regoperator => { const V: &'static Kind = &Kind::Simple; V } - Type::Regclass => { + Inner::Regclass => { const V: &'static Kind = &Kind::Simple; V } - Type::Regtype => { + Inner::Regtype => { const V: &'static Kind = &Kind::Simple; V } - Type::RegprocedureArray => { - const V: &'static Kind = &Kind::Array(Type::Regprocedure); + Inner::RegprocedureArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regprocedure)); V } - Type::RegoperArray => { - const V: &'static Kind = &Kind::Array(Type::Regoper); + Inner::RegoperArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regoper)); V } - Type::RegoperatorArray => { - const V: &'static Kind = &Kind::Array(Type::Regoperator); + Inner::RegoperatorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regoperator)); V } - Type::RegclassArray => { - const V: &'static Kind = &Kind::Array(Type::Regclass); + Inner::RegclassArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regclass)); V } - Type::RegtypeArray => { - const V: &'static Kind = &Kind::Array(Type::Regtype); + Inner::RegtypeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regtype)); V } - Type::Record => { + Inner::Record => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Cstring => { + Inner::Cstring => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Any => { + Inner::Any => { const V: &'static Kind = &Kind::Pseudo; V } - Type::AnyArray => { + Inner::Anyarray => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Void => { + Inner::Void => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Trigger => { + Inner::Trigger => { const V: &'static Kind = &Kind::Pseudo; V } - Type::LanguageHandler => { + Inner::LanguageHandler => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Internal => { + Inner::Internal => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Opaque => { + Inner::Opaque => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Anyelement => { + Inner::Anyelement => { const V: &'static Kind = &Kind::Pseudo; V } - Type::RecordArray => { + Inner::RecordArray => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Anynonarray => { + Inner::Anynonarray => { const V: &'static Kind = &Kind::Pseudo; V } - Type::TxidSnapshotArray => { - const V: &'static Kind = &Kind::Array(Type::TxidSnapshot); + Inner::TxidSnapshotArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::TxidSnapshot)); V } - Type::Uuid => { + Inner::Uuid => { const V: &'static Kind = &Kind::Simple; V } - Type::UuidArray => { - const V: &'static Kind = &Kind::Array(Type::Uuid); + Inner::UuidArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Uuid)); V } - Type::TxidSnapshot => { + Inner::TxidSnapshot => { const V: &'static Kind = &Kind::Simple; V } - Type::FdwHandler => { + Inner::FdwHandler => { const V: &'static Kind = &Kind::Pseudo; V } - Type::PgLsn => { + Inner::PgLsn => { const V: &'static Kind = &Kind::Simple; V } - Type::PgLsnArray => { - const V: &'static Kind = &Kind::Array(Type::PgLsn); + Inner::PgLsnArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::PgLsn)); V } - Type::TsmHandler => { + Inner::TsmHandler => { const V: &'static Kind = &Kind::Pseudo; V } - Type::PgNdistinct => { + Inner::PgNdistinct => { const V: &'static Kind = &Kind::Simple; V } - Type::PgDependencies => { + Inner::PgDependencies => { const V: &'static Kind = &Kind::Simple; V } - Type::Anyenum => { + Inner::Anyenum => { const V: &'static Kind = &Kind::Pseudo; V } - Type::TsVector => { + Inner::TsVector => { const V: &'static Kind = &Kind::Simple; V } - Type::Tsquery => { + Inner::Tsquery => { const V: &'static Kind = &Kind::Simple; V } - Type::GtsVector => { + Inner::GtsVector => { const V: &'static Kind = &Kind::Simple; V } - Type::TsVectorArray => { - const V: &'static Kind = &Kind::Array(Type::TsVector); + Inner::TsVectorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::TsVector)); V } - Type::GtsVectorArray => { - const V: &'static Kind = &Kind::Array(Type::GtsVector); + Inner::GtsVectorArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::GtsVector)); V } - Type::TsqueryArray => { - const V: &'static Kind = &Kind::Array(Type::Tsquery); + Inner::TsqueryArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Tsquery)); V } - Type::Regconfig => { + Inner::Regconfig => { const V: &'static Kind = &Kind::Simple; V } - Type::RegconfigArray => { - const V: &'static Kind = &Kind::Array(Type::Regconfig); + Inner::RegconfigArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regconfig)); V } - Type::Regdictionary => { + Inner::Regdictionary => { const V: &'static Kind = &Kind::Simple; V } - Type::RegdictionaryArray => { - const V: &'static Kind = &Kind::Array(Type::Regdictionary); + Inner::RegdictionaryArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regdictionary)); V } - Type::Jsonb => { + Inner::Jsonb => { const V: &'static Kind = &Kind::Simple; V } - Type::JsonbArray => { - const V: &'static Kind = &Kind::Array(Type::Jsonb); + Inner::JsonbArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Jsonb)); V } - Type::AnyRange => { + Inner::AnyRange => { const V: &'static Kind = &Kind::Pseudo; V } - Type::EventTrigger => { + Inner::EventTrigger => { const V: &'static Kind = &Kind::Pseudo; V } - Type::Int4Range => { - const V: &'static Kind = &Kind::Range(Type::Int4); + Inner::Int4Range => { + const V: &'static Kind = &Kind::Range(Type(Inner::Int4)); V } - Type::Int4RangeArray => { - const V: &'static Kind = &Kind::Array(Type::Int4Range); + Inner::Int4RangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int4Range)); V } - Type::NumRange => { - const V: &'static Kind = &Kind::Range(Type::Numeric); + Inner::NumRange => { + const V: &'static Kind = &Kind::Range(Type(Inner::Numeric)); V } - Type::NumRangeArray => { - const V: &'static Kind = &Kind::Array(Type::NumRange); + Inner::NumRangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::NumRange)); V } - Type::TsRange => { - const V: &'static Kind = &Kind::Range(Type::Timestamp); + Inner::TsRange => { + const V: &'static Kind = &Kind::Range(Type(Inner::Timestamp)); V } - Type::TsRangeArray => { - const V: &'static Kind = &Kind::Array(Type::TsRange); + Inner::TsRangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::TsRange)); V } - Type::TstzRange => { - const V: &'static Kind = &Kind::Range(Type::Timestamptz); + Inner::TstzRange => { + const V: &'static Kind = &Kind::Range(Type(Inner::Timestamptz)); V } - Type::TstzRangeArray => { - const V: &'static Kind = &Kind::Array(Type::TstzRange); + Inner::TstzRangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::TstzRange)); V } - Type::DateRange => { - const V: &'static Kind = &Kind::Range(Type::Date); + Inner::DateRange => { + const V: &'static Kind = &Kind::Range(Type(Inner::Date)); V } - Type::DateRangeArray => { - const V: &'static Kind = &Kind::Array(Type::DateRange); + Inner::DateRangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::DateRange)); V } - Type::Int8Range => { - const V: &'static Kind = &Kind::Range(Type::Int8); + Inner::Int8Range => { + const V: &'static Kind = &Kind::Range(Type(Inner::Int8)); V } - Type::Int8RangeArray => { - const V: &'static Kind = &Kind::Array(Type::Int8Range); + Inner::Int8RangeArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Int8Range)); V } - Type::Regnamespace => { + Inner::Regnamespace => { const V: &'static Kind = &Kind::Simple; V } - Type::RegnamespaceArray => { - const V: &'static Kind = &Kind::Array(Type::Regnamespace); + Inner::RegnamespaceArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regnamespace)); V } - Type::Regrole => { + Inner::Regrole => { const V: &'static Kind = &Kind::Simple; V } - Type::RegroleArray => { - const V: &'static Kind = &Kind::Array(Type::Regrole); + Inner::RegroleArray => { + const V: &'static Kind = &Kind::Array(Type(Inner::Regrole)); V } - Type::Other(ref u) => u.kind(), + Inner::Other(ref u) => &u.kind, } } - /// Returns the schema of this type. - pub fn schema(&self) -> &str { - match *self { - Type::Other(ref u) => u.schema(), - _ => "pg_catalog", - } - } - - /// Returns the name of this type. pub fn name(&self) -> &str { match *self { - Type::Bool => "bool", - Type::Bytea => "bytea", - Type::Char => "char", - Type::Name => "name", - Type::Int8 => "int8", - Type::Int2 => "int2", - Type::Int2Vector => "int2vector", - Type::Int4 => "int4", - Type::Regproc => "regproc", - Type::Text => "text", - Type::Oid => "oid", - Type::Tid => "tid", - Type::Xid => "xid", - Type::Cid => "cid", - Type::OidVector => "oidvector", - Type::PgDdlCommand => "pg_ddl_command", - Type::Json => "json", - Type::Xml => "xml", - Type::XmlArray => "_xml", - Type::PgNodeTree => "pg_node_tree", - Type::JsonArray => "_json", - Type::Smgr => "smgr", - Type::IndexAmHandler => "index_am_handler", - Type::Point => "point", - Type::Lseg => "lseg", - Type::Path => "path", - Type::Box => "box", - Type::Polygon => "polygon", - Type::Line => "line", - Type::LineArray => "_line", - Type::Cidr => "cidr", - Type::CidrArray => "_cidr", - Type::Float4 => "float4", - Type::Float8 => "float8", - Type::Abstime => "abstime", - Type::Reltime => "reltime", - Type::Tinterval => "tinterval", - Type::Unknown => "unknown", - Type::Circle => "circle", - Type::CircleArray => "_circle", - Type::Macaddr8 => "macaddr8", - Type::Macaddr8Array => "_macaddr8", - Type::Money => "money", - Type::MoneyArray => "_money", - Type::Macaddr => "macaddr", - Type::Inet => "inet", - Type::BoolArray => "_bool", - Type::ByteaArray => "_bytea", - Type::CharArray => "_char", - Type::NameArray => "_name", - Type::Int2Array => "_int2", - Type::Int2VectorArray => "_int2vector", - Type::Int4Array => "_int4", - Type::RegprocArray => "_regproc", - Type::TextArray => "_text", - Type::TidArray => "_tid", - Type::XidArray => "_xid", - Type::CidArray => "_cid", - Type::OidVectorArray => "_oidvector", - Type::BpcharArray => "_bpchar", - Type::VarcharArray => "_varchar", - Type::Int8Array => "_int8", - Type::PointArray => "_point", - Type::LsegArray => "_lseg", - Type::PathArray => "_path", - Type::BoxArray => "_box", - Type::Float4Array => "_float4", - Type::Float8Array => "_float8", - Type::AbstimeArray => "_abstime", - Type::ReltimeArray => "_reltime", - Type::TintervalArray => "_tinterval", - Type::PolygonArray => "_polygon", - Type::OidArray => "_oid", - Type::Aclitem => "aclitem", - Type::AclitemArray => "_aclitem", - Type::MacaddrArray => "_macaddr", - Type::InetArray => "_inet", - Type::Bpchar => "bpchar", - Type::Varchar => "varchar", - Type::Date => "date", - Type::Time => "time", - Type::Timestamp => "timestamp", - Type::TimestampArray => "_timestamp", - Type::DateArray => "_date", - Type::TimeArray => "_time", - Type::Timestamptz => "timestamptz", - Type::TimestamptzArray => "_timestamptz", - Type::Interval => "interval", - Type::IntervalArray => "_interval", - Type::NumericArray => "_numeric", - Type::CstringArray => "_cstring", - Type::Timetz => "timetz", - Type::TimetzArray => "_timetz", - Type::Bit => "bit", - Type::BitArray => "_bit", - Type::Varbit => "varbit", - Type::VarbitArray => "_varbit", - Type::Numeric => "numeric", - Type::Refcursor => "refcursor", - Type::RefcursorArray => "_refcursor", - Type::Regprocedure => "regprocedure", - Type::Regoper => "regoper", - Type::Regoperator => "regoperator", - Type::Regclass => "regclass", - Type::Regtype => "regtype", - Type::RegprocedureArray => "_regprocedure", - Type::RegoperArray => "_regoper", - Type::RegoperatorArray => "_regoperator", - Type::RegclassArray => "_regclass", - Type::RegtypeArray => "_regtype", - Type::Record => "record", - Type::Cstring => "cstring", - Type::Any => "any", - Type::AnyArray => "anyarray", - Type::Void => "void", - Type::Trigger => "trigger", - Type::LanguageHandler => "language_handler", - Type::Internal => "internal", - Type::Opaque => "opaque", - Type::Anyelement => "anyelement", - Type::RecordArray => "_record", - Type::Anynonarray => "anynonarray", - Type::TxidSnapshotArray => "_txid_snapshot", - Type::Uuid => "uuid", - Type::UuidArray => "_uuid", - Type::TxidSnapshot => "txid_snapshot", - Type::FdwHandler => "fdw_handler", - Type::PgLsn => "pg_lsn", - Type::PgLsnArray => "_pg_lsn", - Type::TsmHandler => "tsm_handler", - Type::PgNdistinct => "pg_ndistinct", - Type::PgDependencies => "pg_dependencies", - Type::Anyenum => "anyenum", - Type::TsVector => "tsvector", - Type::Tsquery => "tsquery", - Type::GtsVector => "gtsvector", - Type::TsVectorArray => "_tsvector", - Type::GtsVectorArray => "_gtsvector", - Type::TsqueryArray => "_tsquery", - Type::Regconfig => "regconfig", - Type::RegconfigArray => "_regconfig", - Type::Regdictionary => "regdictionary", - Type::RegdictionaryArray => "_regdictionary", - Type::Jsonb => "jsonb", - Type::JsonbArray => "_jsonb", - Type::AnyRange => "anyrange", - Type::EventTrigger => "event_trigger", - Type::Int4Range => "int4range", - Type::Int4RangeArray => "_int4range", - Type::NumRange => "numrange", - Type::NumRangeArray => "_numrange", - Type::TsRange => "tsrange", - Type::TsRangeArray => "_tsrange", - Type::TstzRange => "tstzrange", - Type::TstzRangeArray => "_tstzrange", - Type::DateRange => "daterange", - Type::DateRangeArray => "_daterange", - Type::Int8Range => "int8range", - Type::Int8RangeArray => "_int8range", - Type::Regnamespace => "regnamespace", - Type::RegnamespaceArray => "_regnamespace", - Type::Regrole => "regrole", - Type::RegroleArray => "_regrole", - Type::Other(ref u) => u.name(), + Inner::Bool => "bool", + Inner::Bytea => "bytea", + Inner::Char => "char", + Inner::Name => "name", + Inner::Int8 => "int8", + Inner::Int2 => "int2", + Inner::Int2Vector => "int2vector", + Inner::Int4 => "int4", + Inner::Regproc => "regproc", + Inner::Text => "text", + Inner::Oid => "oid", + Inner::Tid => "tid", + Inner::Xid => "xid", + Inner::Cid => "cid", + Inner::OidVector => "oidvector", + Inner::PgDdlCommand => "pg_ddl_command", + Inner::Json => "json", + Inner::Xml => "xml", + Inner::XmlArray => "_xml", + Inner::PgNodeTree => "pg_node_tree", + Inner::JsonArray => "_json", + Inner::Smgr => "smgr", + Inner::IndexAmHandler => "index_am_handler", + Inner::Point => "point", + Inner::Lseg => "lseg", + Inner::Path => "path", + Inner::Box => "box", + Inner::Polygon => "polygon", + Inner::Line => "line", + Inner::LineArray => "_line", + Inner::Cidr => "cidr", + Inner::CidrArray => "_cidr", + Inner::Float4 => "float4", + Inner::Float8 => "float8", + Inner::Abstime => "abstime", + Inner::Reltime => "reltime", + Inner::Tinterval => "tinterval", + Inner::Unknown => "unknown", + Inner::Circle => "circle", + Inner::CircleArray => "_circle", + Inner::Macaddr8 => "macaddr8", + Inner::Macaddr8Array => "_macaddr8", + Inner::Money => "money", + Inner::MoneyArray => "_money", + Inner::Macaddr => "macaddr", + Inner::Inet => "inet", + Inner::BoolArray => "_bool", + Inner::ByteaArray => "_bytea", + Inner::CharArray => "_char", + Inner::NameArray => "_name", + Inner::Int2Array => "_int2", + Inner::Int2VectorArray => "_int2vector", + Inner::Int4Array => "_int4", + Inner::RegprocArray => "_regproc", + Inner::TextArray => "_text", + Inner::TidArray => "_tid", + Inner::XidArray => "_xid", + Inner::CidArray => "_cid", + Inner::OidVectorArray => "_oidvector", + Inner::BpcharArray => "_bpchar", + Inner::VarcharArray => "_varchar", + Inner::Int8Array => "_int8", + Inner::PointArray => "_point", + Inner::LsegArray => "_lseg", + Inner::PathArray => "_path", + Inner::BoxArray => "_box", + Inner::Float4Array => "_float4", + Inner::Float8Array => "_float8", + Inner::AbstimeArray => "_abstime", + Inner::ReltimeArray => "_reltime", + Inner::TintervalArray => "_tinterval", + Inner::PolygonArray => "_polygon", + Inner::OidArray => "_oid", + Inner::Aclitem => "aclitem", + Inner::AclitemArray => "_aclitem", + Inner::MacaddrArray => "_macaddr", + Inner::InetArray => "_inet", + Inner::Bpchar => "bpchar", + Inner::Varchar => "varchar", + Inner::Date => "date", + Inner::Time => "time", + Inner::Timestamp => "timestamp", + Inner::TimestampArray => "_timestamp", + Inner::DateArray => "_date", + Inner::TimeArray => "_time", + Inner::Timestamptz => "timestamptz", + Inner::TimestamptzArray => "_timestamptz", + Inner::Interval => "interval", + Inner::IntervalArray => "_interval", + Inner::NumericArray => "_numeric", + Inner::CstringArray => "_cstring", + Inner::Timetz => "timetz", + Inner::TimetzArray => "_timetz", + Inner::Bit => "bit", + Inner::BitArray => "_bit", + Inner::Varbit => "varbit", + Inner::VarbitArray => "_varbit", + Inner::Numeric => "numeric", + Inner::Refcursor => "refcursor", + Inner::RefcursorArray => "_refcursor", + Inner::Regprocedure => "regprocedure", + Inner::Regoper => "regoper", + Inner::Regoperator => "regoperator", + Inner::Regclass => "regclass", + Inner::Regtype => "regtype", + Inner::RegprocedureArray => "_regprocedure", + Inner::RegoperArray => "_regoper", + Inner::RegoperatorArray => "_regoperator", + Inner::RegclassArray => "_regclass", + Inner::RegtypeArray => "_regtype", + Inner::Record => "record", + Inner::Cstring => "cstring", + Inner::Any => "any", + Inner::Anyarray => "anyarray", + Inner::Void => "void", + Inner::Trigger => "trigger", + Inner::LanguageHandler => "language_handler", + Inner::Internal => "internal", + Inner::Opaque => "opaque", + Inner::Anyelement => "anyelement", + Inner::RecordArray => "_record", + Inner::Anynonarray => "anynonarray", + Inner::TxidSnapshotArray => "_txid_snapshot", + Inner::Uuid => "uuid", + Inner::UuidArray => "_uuid", + Inner::TxidSnapshot => "txid_snapshot", + Inner::FdwHandler => "fdw_handler", + Inner::PgLsn => "pg_lsn", + Inner::PgLsnArray => "_pg_lsn", + Inner::TsmHandler => "tsm_handler", + Inner::PgNdistinct => "pg_ndistinct", + Inner::PgDependencies => "pg_dependencies", + Inner::Anyenum => "anyenum", + Inner::TsVector => "tsvector", + Inner::Tsquery => "tsquery", + Inner::GtsVector => "gtsvector", + Inner::TsVectorArray => "_tsvector", + Inner::GtsVectorArray => "_gtsvector", + Inner::TsqueryArray => "_tsquery", + Inner::Regconfig => "regconfig", + Inner::RegconfigArray => "_regconfig", + Inner::Regdictionary => "regdictionary", + Inner::RegdictionaryArray => "_regdictionary", + Inner::Jsonb => "jsonb", + Inner::JsonbArray => "_jsonb", + Inner::AnyRange => "anyrange", + Inner::EventTrigger => "event_trigger", + Inner::Int4Range => "int4range", + Inner::Int4RangeArray => "_int4range", + Inner::NumRange => "numrange", + Inner::NumRangeArray => "_numrange", + Inner::TsRange => "tsrange", + Inner::TsRangeArray => "_tsrange", + Inner::TstzRange => "tstzrange", + Inner::TstzRangeArray => "_tstzrange", + Inner::DateRange => "daterange", + Inner::DateRangeArray => "_daterange", + Inner::Int8Range => "int8range", + Inner::Int8RangeArray => "_int8range", + Inner::Regnamespace => "regnamespace", + Inner::RegnamespaceArray => "_regnamespace", + Inner::Regrole => "regrole", + Inner::RegroleArray => "_regrole", + Inner::Other(ref u) => &u.name, } } } +pub mod consts { + use types::Type; + use types::type_gen::Inner; + + /// BOOL - boolean, 'true'/'false' + pub const BOOL: Type = Type(Inner::Bool); + + /// BYTEA - variable-length string, binary values escaped + pub const BYTEA: Type = Type(Inner::Bytea); + + /// CHAR - single character + pub const CHAR: Type = Type(Inner::Char); + + /// NAME - 63-byte type for storing system identifiers + pub const NAME: Type = Type(Inner::Name); + + /// INT8 - ~18 digit integer, 8-byte storage + pub const INT8: Type = Type(Inner::Int8); + + /// INT2 - -32 thousand to 32 thousand, 2-byte storage + pub const INT2: Type = Type(Inner::Int2); + + /// INT2VECTOR - array of int2, used in system tables + pub const INT2_VECTOR: Type = Type(Inner::Int2Vector); + + /// INT4 - -2 billion to 2 billion integer, 4-byte storage + pub const INT4: Type = Type(Inner::Int4); + + /// REGPROC - registered procedure + pub const REGPROC: Type = Type(Inner::Regproc); + + /// TEXT - variable-length string, no limit specified + pub const TEXT: Type = Type(Inner::Text); + + /// OID - object identifier(oid), maximum 4 billion + pub const OID: Type = Type(Inner::Oid); + + /// TID - (block, offset), physical location of tuple + pub const TID: Type = Type(Inner::Tid); + + /// XID - transaction id + pub const XID: Type = Type(Inner::Xid); + + /// CID - command identifier type, sequence in transaction id + pub const CID: Type = Type(Inner::Cid); + + /// OIDVECTOR - array of oids, used in system tables + pub const OID_VECTOR: Type = Type(Inner::OidVector); + + /// PG_DDL_COMMAND - internal type for passing CollectedCommand + pub const PG_DDL_COMMAND: Type = Type(Inner::PgDdlCommand); + + /// JSON + pub const JSON: Type = Type(Inner::Json); + + /// XML - XML content + pub const XML: Type = Type(Inner::Xml); + + /// XML[] + pub const XML_ARRAY: Type = Type(Inner::XmlArray); + + /// PG_NODE_TREE - string representing an internal node tree + pub const PG_NODE_TREE: Type = Type(Inner::PgNodeTree); + + /// JSON[] + pub const JSON_ARRAY: Type = Type(Inner::JsonArray); + + /// SMGR - storage manager + pub const SMGR: Type = Type(Inner::Smgr); + + /// INDEX_AM_HANDLER + pub const INDEX_AM_HANDLER: Type = Type(Inner::IndexAmHandler); + + /// POINT - geometric point '(x, y)' + pub const POINT: Type = Type(Inner::Point); + + /// LSEG - geometric line segment '(pt1,pt2)' + pub const LSEG: Type = Type(Inner::Lseg); + + /// PATH - geometric path '(pt1,...)' + pub const PATH: Type = Type(Inner::Path); + + /// BOX - geometric box '(lower left,upper right)' + pub const BOX: Type = Type(Inner::Box); + + /// POLYGON - geometric polygon '(pt1,...)' + pub const POLYGON: Type = Type(Inner::Polygon); + + /// LINE - geometric line + pub const LINE: Type = Type(Inner::Line); + + /// LINE[] + pub const LINE_ARRAY: Type = Type(Inner::LineArray); + + /// CIDR - network IP address/netmask, network address + pub const CIDR: Type = Type(Inner::Cidr); + + /// CIDR[] + pub const CIDR_ARRAY: Type = Type(Inner::CidrArray); + + /// FLOAT4 - single-precision floating point number, 4-byte storage + pub const FLOAT4: Type = Type(Inner::Float4); + + /// FLOAT8 - double-precision floating point number, 8-byte storage + pub const FLOAT8: Type = Type(Inner::Float8); + + /// ABSTIME - absolute, limited-range date and time (Unix system time) + pub const ABSTIME: Type = Type(Inner::Abstime); + + /// RELTIME - relative, limited-range time interval (Unix delta time) + pub const RELTIME: Type = Type(Inner::Reltime); + + /// TINTERVAL - (abstime,abstime), time interval + pub const TINTERVAL: Type = Type(Inner::Tinterval); + + /// UNKNOWN + pub const UNKNOWN: Type = Type(Inner::Unknown); + + /// CIRCLE - geometric circle '(center,radius)' + pub const CIRCLE: Type = Type(Inner::Circle); + + /// CIRCLE[] + pub const CIRCLE_ARRAY: Type = Type(Inner::CircleArray); + + /// MACADDR8 - XX:XX:XX:XX:XX:XX:XX:XX, MAC address + pub const MACADDR8: Type = Type(Inner::Macaddr8); + + /// MACADDR8[] + pub const MACADDR8_ARRAY: Type = Type(Inner::Macaddr8Array); + + /// MONEY - monetary amounts, $d,ddd.cc + pub const MONEY: Type = Type(Inner::Money); + + /// MONEY[] + pub const MONEY_ARRAY: Type = Type(Inner::MoneyArray); + + /// MACADDR - XX:XX:XX:XX:XX:XX, MAC address + pub const MACADDR: Type = Type(Inner::Macaddr); + + /// INET - IP address/netmask, host address, netmask optional + pub const INET: Type = Type(Inner::Inet); + + /// BOOL[] + pub const BOOL_ARRAY: Type = Type(Inner::BoolArray); + + /// BYTEA[] + pub const BYTEA_ARRAY: Type = Type(Inner::ByteaArray); + + /// CHAR[] + pub const CHAR_ARRAY: Type = Type(Inner::CharArray); + + /// NAME[] + pub const NAME_ARRAY: Type = Type(Inner::NameArray); + + /// INT2[] + pub const INT2_ARRAY: Type = Type(Inner::Int2Array); + + /// INT2VECTOR[] + pub const INT2_VECTOR_ARRAY: Type = Type(Inner::Int2VectorArray); + + /// INT4[] + pub const INT4_ARRAY: Type = Type(Inner::Int4Array); + + /// REGPROC[] + pub const REGPROC_ARRAY: Type = Type(Inner::RegprocArray); + + /// TEXT[] + pub const TEXT_ARRAY: Type = Type(Inner::TextArray); + + /// TID[] + pub const TID_ARRAY: Type = Type(Inner::TidArray); + + /// XID[] + pub const XID_ARRAY: Type = Type(Inner::XidArray); + + /// CID[] + pub const CID_ARRAY: Type = Type(Inner::CidArray); + + /// OIDVECTOR[] + pub const OID_VECTOR_ARRAY: Type = Type(Inner::OidVectorArray); + + /// BPCHAR[] + pub const BPCHAR_ARRAY: Type = Type(Inner::BpcharArray); + + /// VARCHAR[] + pub const VARCHAR_ARRAY: Type = Type(Inner::VarcharArray); + + /// INT8[] + pub const INT8_ARRAY: Type = Type(Inner::Int8Array); + + /// POINT[] + pub const POINT_ARRAY: Type = Type(Inner::PointArray); + + /// LSEG[] + pub const LSEG_ARRAY: Type = Type(Inner::LsegArray); + + /// PATH[] + pub const PATH_ARRAY: Type = Type(Inner::PathArray); + + /// BOX[] + pub const BOX_ARRAY: Type = Type(Inner::BoxArray); + + /// FLOAT4[] + pub const FLOAT4_ARRAY: Type = Type(Inner::Float4Array); + + /// FLOAT8[] + pub const FLOAT8_ARRAY: Type = Type(Inner::Float8Array); + + /// ABSTIME[] + pub const ABSTIME_ARRAY: Type = Type(Inner::AbstimeArray); + + /// RELTIME[] + pub const RELTIME_ARRAY: Type = Type(Inner::ReltimeArray); + + /// TINTERVAL[] + pub const TINTERVAL_ARRAY: Type = Type(Inner::TintervalArray); + + /// POLYGON[] + pub const POLYGON_ARRAY: Type = Type(Inner::PolygonArray); + + /// OID[] + pub const OID_ARRAY: Type = Type(Inner::OidArray); + + /// ACLITEM - access control list + pub const ACLITEM: Type = Type(Inner::Aclitem); + + /// ACLITEM[] + pub const ACLITEM_ARRAY: Type = Type(Inner::AclitemArray); + + /// MACADDR[] + pub const MACADDR_ARRAY: Type = Type(Inner::MacaddrArray); + + /// INET[] + pub const INET_ARRAY: Type = Type(Inner::InetArray); + + /// BPCHAR - char(length), blank-padded string, fixed storage length + pub const BPCHAR: Type = Type(Inner::Bpchar); + + /// VARCHAR - varchar(length), non-blank-padded string, variable storage length + pub const VARCHAR: Type = Type(Inner::Varchar); + + /// DATE - date + pub const DATE: Type = Type(Inner::Date); + + /// TIME - time of day + pub const TIME: Type = Type(Inner::Time); + + /// TIMESTAMP - date and time + pub const TIMESTAMP: Type = Type(Inner::Timestamp); + + /// TIMESTAMP[] + pub const TIMESTAMP_ARRAY: Type = Type(Inner::TimestampArray); + + /// DATE[] + pub const DATE_ARRAY: Type = Type(Inner::DateArray); + + /// TIME[] + pub const TIME_ARRAY: Type = Type(Inner::TimeArray); + + /// TIMESTAMPTZ - date and time with time zone + pub const TIMESTAMPTZ: Type = Type(Inner::Timestamptz); + + /// TIMESTAMPTZ[] + pub const TIMESTAMPTZ_ARRAY: Type = Type(Inner::TimestamptzArray); + + /// INTERVAL - @ <number> <units>, time interval + pub const INTERVAL: Type = Type(Inner::Interval); + + /// INTERVAL[] + pub const INTERVAL_ARRAY: Type = Type(Inner::IntervalArray); + + /// NUMERIC[] + pub const NUMERIC_ARRAY: Type = Type(Inner::NumericArray); + + /// CSTRING[] + pub const CSTRING_ARRAY: Type = Type(Inner::CstringArray); + + /// TIMETZ - time of day with time zone + pub const TIMETZ: Type = Type(Inner::Timetz); + + /// TIMETZ[] + pub const TIMETZ_ARRAY: Type = Type(Inner::TimetzArray); + + /// BIT - fixed-length bit string + pub const BIT: Type = Type(Inner::Bit); + + /// BIT[] + pub const BIT_ARRAY: Type = Type(Inner::BitArray); + + /// VARBIT - variable-length bit string + pub const VARBIT: Type = Type(Inner::Varbit); + + /// VARBIT[] + pub const VARBIT_ARRAY: Type = Type(Inner::VarbitArray); + + /// NUMERIC - numeric(precision, decimal), arbitrary precision number + pub const NUMERIC: Type = Type(Inner::Numeric); + + /// REFCURSOR - reference to cursor (portal name) + pub const REFCURSOR: Type = Type(Inner::Refcursor); + + /// REFCURSOR[] + pub const REFCURSOR_ARRAY: Type = Type(Inner::RefcursorArray); + + /// REGPROCEDURE - registered procedure (with args) + pub const REGPROCEDURE: Type = Type(Inner::Regprocedure); + + /// REGOPER - registered operator + pub const REGOPER: Type = Type(Inner::Regoper); + + /// REGOPERATOR - registered operator (with args) + pub const REGOPERATOR: Type = Type(Inner::Regoperator); + + /// REGCLASS - registered class + pub const REGCLASS: Type = Type(Inner::Regclass); + + /// REGTYPE - registered type + pub const REGTYPE: Type = Type(Inner::Regtype); + + /// REGPROCEDURE[] + pub const REGPROCEDURE_ARRAY: Type = Type(Inner::RegprocedureArray); + + /// REGOPER[] + pub const REGOPER_ARRAY: Type = Type(Inner::RegoperArray); + + /// REGOPERATOR[] + pub const REGOPERATOR_ARRAY: Type = Type(Inner::RegoperatorArray); + + /// REGCLASS[] + pub const REGCLASS_ARRAY: Type = Type(Inner::RegclassArray); + + /// REGTYPE[] + pub const REGTYPE_ARRAY: Type = Type(Inner::RegtypeArray); + + /// RECORD + pub const RECORD: Type = Type(Inner::Record); + + /// CSTRING + pub const CSTRING: Type = Type(Inner::Cstring); + + /// ANY + pub const ANY: Type = Type(Inner::Any); + + /// ANYARRAY + pub const ANYARRAY: Type = Type(Inner::Anyarray); + + /// VOID + pub const VOID: Type = Type(Inner::Void); + + /// TRIGGER + pub const TRIGGER: Type = Type(Inner::Trigger); + + /// LANGUAGE_HANDLER + pub const LANGUAGE_HANDLER: Type = Type(Inner::LanguageHandler); + + /// INTERNAL + pub const INTERNAL: Type = Type(Inner::Internal); + + /// OPAQUE + pub const OPAQUE: Type = Type(Inner::Opaque); + + /// ANYELEMENT + pub const ANYELEMENT: Type = Type(Inner::Anyelement); + + /// RECORD[] + pub const RECORD_ARRAY: Type = Type(Inner::RecordArray); + + /// ANYNONARRAY + pub const ANYNONARRAY: Type = Type(Inner::Anynonarray); + + /// TXID_SNAPSHOT[] + pub const TXID_SNAPSHOT_ARRAY: Type = Type(Inner::TxidSnapshotArray); + + /// UUID - UUID datatype + pub const UUID: Type = Type(Inner::Uuid); + + /// UUID[] + pub const UUID_ARRAY: Type = Type(Inner::UuidArray); + + /// TXID_SNAPSHOT - txid snapshot + pub const TXID_SNAPSHOT: Type = Type(Inner::TxidSnapshot); + + /// FDW_HANDLER + pub const FDW_HANDLER: Type = Type(Inner::FdwHandler); + + /// PG_LSN - PostgreSQL LSN datatype + pub const PG_LSN: Type = Type(Inner::PgLsn); + + /// PG_LSN[] + pub const PG_LSN_ARRAY: Type = Type(Inner::PgLsnArray); + + /// TSM_HANDLER + pub const TSM_HANDLER: Type = Type(Inner::TsmHandler); + + /// PG_NDISTINCT - multivariate ndistinct coefficients + pub const PG_NDISTINCT: Type = Type(Inner::PgNdistinct); + + /// PG_DEPENDENCIES - multivariate dependencies + pub const PG_DEPENDENCIES: Type = Type(Inner::PgDependencies); + + /// ANYENUM + pub const ANYENUM: Type = Type(Inner::Anyenum); + + /// TSVECTOR - text representation for text search + pub const TS_VECTOR: Type = Type(Inner::TsVector); + + /// TSQUERY - query representation for text search + pub const TSQUERY: Type = Type(Inner::Tsquery); + + /// GTSVECTOR - GiST index internal text representation for text search + pub const GTS_VECTOR: Type = Type(Inner::GtsVector); + + /// TSVECTOR[] + pub const TS_VECTOR_ARRAY: Type = Type(Inner::TsVectorArray); + + /// GTSVECTOR[] + pub const GTS_VECTOR_ARRAY: Type = Type(Inner::GtsVectorArray); + + /// TSQUERY[] + pub const TSQUERY_ARRAY: Type = Type(Inner::TsqueryArray); + + /// REGCONFIG - registered text search configuration + pub const REGCONFIG: Type = Type(Inner::Regconfig); + + /// REGCONFIG[] + pub const REGCONFIG_ARRAY: Type = Type(Inner::RegconfigArray); + + /// REGDICTIONARY - registered text search dictionary + pub const REGDICTIONARY: Type = Type(Inner::Regdictionary); + + /// REGDICTIONARY[] + pub const REGDICTIONARY_ARRAY: Type = Type(Inner::RegdictionaryArray); + + /// JSONB - Binary JSON + pub const JSONB: Type = Type(Inner::Jsonb); + + /// JSONB[] + pub const JSONB_ARRAY: Type = Type(Inner::JsonbArray); + + /// ANYRANGE + pub const ANY_RANGE: Type = Type(Inner::AnyRange); + + /// EVENT_TRIGGER + pub const EVENT_TRIGGER: Type = Type(Inner::EventTrigger); + + /// INT4RANGE - range of integers + pub const INT4_RANGE: Type = Type(Inner::Int4Range); + + /// INT4RANGE[] + pub const INT4_RANGE_ARRAY: Type = Type(Inner::Int4RangeArray); + + /// NUMRANGE - range of numerics + pub const NUM_RANGE: Type = Type(Inner::NumRange); + + /// NUMRANGE[] + pub const NUM_RANGE_ARRAY: Type = Type(Inner::NumRangeArray); + + /// TSRANGE - range of timestamps without time zone + pub const TS_RANGE: Type = Type(Inner::TsRange); + + /// TSRANGE[] + pub const TS_RANGE_ARRAY: Type = Type(Inner::TsRangeArray); + + /// TSTZRANGE - range of timestamps with time zone + pub const TSTZ_RANGE: Type = Type(Inner::TstzRange); + + /// TSTZRANGE[] + pub const TSTZ_RANGE_ARRAY: Type = Type(Inner::TstzRangeArray); + + /// DATERANGE - range of dates + pub const DATE_RANGE: Type = Type(Inner::DateRange); + + /// DATERANGE[] + pub const DATE_RANGE_ARRAY: Type = Type(Inner::DateRangeArray); + + /// INT8RANGE - range of bigints + pub const INT8_RANGE: Type = Type(Inner::Int8Range); + + /// INT8RANGE[] + pub const INT8_RANGE_ARRAY: Type = Type(Inner::Int8RangeArray); + + /// REGNAMESPACE - registered namespace + pub const REGNAMESPACE: Type = Type(Inner::Regnamespace); + + /// REGNAMESPACE[] + pub const REGNAMESPACE_ARRAY: Type = Type(Inner::RegnamespaceArray); + + /// REGROLE - registered role + pub const REGROLE: Type = Type(Inner::Regrole); + + /// REGROLE[] + pub const REGROLE_ARRAY: Type = Type(Inner::RegroleArray); +} \ No newline at end of file diff --git a/postgres-shared/src/types/uuid.rs b/postgres-shared/src/types/uuid.rs index 55ffa27e..822f85b0 100644 --- a/postgres-shared/src/types/uuid.rs +++ b/postgres-shared/src/types/uuid.rs @@ -4,7 +4,7 @@ use postgres_protocol::types; use self::uuid::Uuid; use std::error::Error; -use types::{FromSql, ToSql, Type, IsNull}; +use types::{FromSql, ToSql, Type, IsNull, UUID}; impl FromSql for Uuid { fn from_sql(_: &Type, raw: &[u8]) -> Result> { @@ -12,7 +12,7 @@ impl FromSql for Uuid { Ok(Uuid::from_bytes(&bytes).unwrap()) } - accepts!(Type::Uuid); + accepts!(UUID); } impl ToSql for Uuid { @@ -21,6 +21,6 @@ impl ToSql for Uuid { Ok(IsNull::No) } - accepts!(Type::Uuid); + accepts!(UUID); to_sql_checked!(); } diff --git a/postgres/src/lib.rs b/postgres/src/lib.rs index e36e94c3..969851b8 100644 --- a/postgres/src/lib.rs +++ b/postgres/src/lib.rs @@ -101,7 +101,7 @@ use priv_io::MessageStream; use rows::{Rows, LazyRows}; use stmt::{Statement, Column}; use transaction::{Transaction, IsolationLevel}; -use types::{IsNull, Kind, Type, Oid, Other, ToSql, FromSql, Field}; +use types::{IsNull, Kind, Type, Oid, ToSql, FromSql, Field, OID, NAME, CHAR}; #[doc(inline)] pub use postgres_shared::CancelData; @@ -236,7 +236,7 @@ struct InnerConnection { notice_handler: Box, notifications: VecDeque, cancel_data: CancelData, - unknown_types: HashMap, + unknown_types: HashMap, cached_statements: HashMap>, parameters: HashMap, next_stmt_id: u32, @@ -745,12 +745,12 @@ impl InnerConnection { } if let Some(ty) = self.unknown_types.get(&oid) { - return Ok(Type::Other(ty.clone())); + return Ok(ty.clone()); } let ty = self.read_type(oid)?; self.unknown_types.insert(oid, ty.clone()); - Ok(Type::Other(ty)) + Ok(ty) } fn setup_typeinfo_query(&mut self) -> Result<()> { @@ -790,13 +790,13 @@ impl InnerConnection { } #[allow(if_not_else)] - fn read_type(&mut self, oid: Oid) -> Result { + fn read_type(&mut self, oid: Oid) -> Result { self.setup_typeinfo_query()?; self.raw_execute( TYPEINFO_QUERY, "", 0, - &[Type::Oid], + &[OID], &[&oid], )?; let mut row = None; @@ -805,24 +805,24 @@ impl InnerConnection { let get_raw = |i: usize| row.as_ref().and_then(|r| r.get(i)); let (name, type_, elem_oid, rngsubtype, basetype, schema, relid) = { - let name = String::from_sql_nullable(&Type::Name, get_raw(0)).map_err( + let name = String::from_sql_nullable(&NAME, get_raw(0)).map_err( Error::Conversion, )?; - let type_ = i8::from_sql_nullable(&Type::Char, get_raw(1)).map_err( + let type_ = i8::from_sql_nullable(&CHAR, get_raw(1)).map_err( Error::Conversion, )?; - let elem_oid = Oid::from_sql_nullable(&Type::Oid, get_raw(2)).map_err( + let elem_oid = Oid::from_sql_nullable(&OID, get_raw(2)).map_err( Error::Conversion, )?; - let rngsubtype = Option::::from_sql_nullable(&Type::Oid, get_raw(3)) + let rngsubtype = Option::::from_sql_nullable(&OID, get_raw(3)) .map_err(Error::Conversion)?; - let basetype = Oid::from_sql_nullable(&Type::Oid, get_raw(4)).map_err( + let basetype = Oid::from_sql_nullable(&OID, get_raw(4)).map_err( Error::Conversion, )?; - let schema = String::from_sql_nullable(&Type::Name, get_raw(5)).map_err( + let schema = String::from_sql_nullable(&NAME, get_raw(5)).map_err( Error::Conversion, )?; - let relid = Oid::from_sql_nullable(&Type::Oid, get_raw(6)).map_err( + let relid = Oid::from_sql_nullable(&OID, get_raw(6)).map_err( Error::Conversion, )?; (name, type_, elem_oid, rngsubtype, basetype, schema, relid) @@ -845,7 +845,7 @@ impl InnerConnection { } }; - Ok(Other::new(name, oid, kind, schema)) + Ok(Type::_new(name, oid, kind, schema)) } fn setup_typeinfo_enum_query(&mut self) -> Result<()> { @@ -884,7 +884,7 @@ impl InnerConnection { TYPEINFO_ENUM_QUERY, "", 0, - &[Type::Oid], + &[OID], &[&oid], )?; let mut rows = vec![]; @@ -892,7 +892,7 @@ impl InnerConnection { let mut variants = vec![]; for row in rows { - variants.push(String::from_sql_nullable(&Type::Name, row.get(0)).map_err( + variants.push(String::from_sql_nullable(&NAME, row.get(0)).map_err( Error::Conversion, )?); } @@ -925,7 +925,7 @@ impl InnerConnection { TYPEINFO_COMPOSITE_QUERY, "", 0, - &[Type::Oid], + &[OID], &[&relid], )?; let mut rows = vec![]; @@ -934,10 +934,10 @@ impl InnerConnection { let mut fields = vec![]; for row in rows { let (name, type_) = { - let name = String::from_sql_nullable(&Type::Name, row.get(0)).map_err( + let name = String::from_sql_nullable(&NAME, row.get(0)).map_err( Error::Conversion, )?; - let type_ = Oid::from_sql_nullable(&Type::Oid, row.get(1)).map_err( + let type_ = Oid::from_sql_nullable(&OID, row.get(1)).map_err( Error::Conversion, )?; (name, type_) @@ -1468,10 +1468,6 @@ fn err(fields: &mut ErrorFields) -> Error { } } -trait OtherNew { - fn new(name: String, oid: Oid, kind: Kind, schema: String) -> Other; -} - trait RowsNew { fn new(stmt: &Statement, data: Vec) -> Rows<'static>; } diff --git a/postgres/src/types.rs b/postgres/src/types.rs index fb692490..ccbfbc01 100644 --- a/postgres/src/types.rs +++ b/postgres/src/types.rs @@ -1,8 +1,8 @@ //! Traits dealing with Postgres data types #[doc(inline)] -pub use postgres_shared::types::{Oid, Type, Date, Timestamp, Kind, Field, Other, WasNull, - WrongType, FromSql, IsNull, ToSql}; +// FIXME +pub use postgres_shared::types::*; #[doc(hidden)] pub use postgres_shared::types::__to_sql_checked; diff --git a/postgres/tests/test.rs b/postgres/tests/test.rs index 9647b387..8e34b4c3 100644 --- a/postgres/tests/test.rs +++ b/postgres/tests/test.rs @@ -14,7 +14,7 @@ use postgres::{HandleNotice, Connection, GenericConnection, TlsMode}; use postgres::transaction::{self, IsolationLevel}; use postgres::error::{Error, ConnectError, DbError, SYNTAX_ERROR, QUERY_CANCELED, UNDEFINED_TABLE, INVALID_CATALOG_NAME, INVALID_PASSWORD, CARDINALITY_VIOLATION}; -use postgres::types::{Oid, Type, Kind, WrongType}; +use postgres::types::{Oid, Type, Kind, WrongType, INT4, VARCHAR, FLOAT8}; use postgres::error::ErrorPosition::Normal; use postgres::rows::RowIndex; use postgres::notification::Notification; @@ -574,7 +574,7 @@ fn test_param_types() { TlsMode::None, )); let stmt = or_panic!(conn.prepare("SELECT $1::INT, $2::VARCHAR")); - assert_eq!(stmt.param_types(), &[Type::Int4, Type::Varchar][..]); + assert_eq!(stmt.param_types(), &[INT4, VARCHAR][..]); } #[test] @@ -587,9 +587,9 @@ fn test_columns() { let cols = stmt.columns(); assert_eq!(2, cols.len()); assert_eq!(cols[0].name(), "a"); - assert_eq!(cols[0].type_(), &Type::Int4); + assert_eq!(cols[0].type_(), &INT4); assert_eq!(cols[1].name(), "b"); - assert_eq!(cols[1].type_(), &Type::Varchar); + assert_eq!(cols[1].type_(), &VARCHAR); } #[test] @@ -1277,13 +1277,9 @@ fn test_custom_range_element_type() { &[], )); let stmt = or_panic!(conn.prepare("SELECT $1::floatrange")); - match &stmt.param_types()[0] { - &Type::Other(ref u) => { - assert_eq!("floatrange", u.name()); - assert_eq!(&Kind::Range(Type::Float8), u.kind()); - } - t => panic!("Unexpected type {:?}", t), - } + let ty = &stmt.param_types()[0]; + assert_eq!("floatrange", ty.name()); + assert_eq!(&Kind::Range(FLOAT8), ty.kind()); } #[test] diff --git a/postgres/tests/types/mod.rs b/postgres/tests/types/mod.rs index a164caa7..6582f77f 100644 --- a/postgres/tests/types/mod.rs +++ b/postgres/tests/types/mod.rs @@ -7,7 +7,7 @@ use std::result; use postgres::{Connection, TlsMode}; use postgres::error::Error; -use postgres::types::{ToSql, FromSql, WrongType, Type, IsNull, Kind}; +use postgres::types::{ToSql, FromSql, WrongType, Type, IsNull, Kind, TEXT, INT4, NUMERIC}; #[cfg(feature = "with-bit-vec")] mod bit_vec; @@ -449,11 +449,11 @@ fn composite() { match *type_.kind() { Kind::Composite(ref fields) => { assert_eq!(fields[0].name(), "name"); - assert_eq!(fields[0].type_(), &Type::Text); + assert_eq!(fields[0].type_(), &TEXT); assert_eq!(fields[1].name(), "supplier"); - assert_eq!(fields[1].type_(), &Type::Int4); + assert_eq!(fields[1].type_(), &INT4); assert_eq!(fields[2].name(), "price"); - assert_eq!(fields[2].type_(), &Type::Numeric); + assert_eq!(fields[2].type_(), &NUMERIC); } ref t => panic!("bad type {:?}", t), } diff --git a/tokio-postgres/src/lib.rs b/tokio-postgres/src/lib.rs index 55d0bb9b..1ad587dd 100644 --- a/tokio-postgres/src/lib.rs +++ b/tokio-postgres/src/lib.rs @@ -95,7 +95,7 @@ use stmt::{Statement, Column}; use stream::PostgresStream; use tls::Handshake; use transaction::Transaction; -use types::{Oid, Type, ToSql, IsNull, FromSql, Other, Kind, Field}; +use types::{Oid, Type, ToSql, IsNull, FromSql, Kind, Field, NAME, CHAR, OID}; use rows::Row; pub mod error; @@ -173,7 +173,7 @@ struct InnerConnection { close_receiver: Receiver<(u8, String)>, close_sender: Sender<(u8, String)>, parameters: HashMap, - types: HashMap, + types: HashMap, notifications: VecDeque, cancel_data: CancelData, has_typeinfo_query: bool, @@ -661,53 +661,53 @@ impl Connection { return Ok((type_, self)).into_future().boxed(); }; - let other = self.0.types.get(&oid).map(Clone::clone); - if let Some(other) = other { - return Ok((Type::Other(other), self)).into_future().boxed(); + let ty = self.0.types.get(&oid).map(Clone::clone); + if let Some(ty) = ty { + return Ok((ty, self)).into_future().boxed(); } self.get_unknown_type(oid) .map(move |(ty, mut c)| { c.0.types.insert(oid, ty.clone()); - (Type::Other(ty), c) + (ty, c) }) .boxed() } - fn get_unknown_type(self, oid: Oid) -> BoxFuture<(Other, Connection), Error> { + fn get_unknown_type(self, oid: Oid) -> BoxFuture<(Type, Connection), Error> { self.setup_typeinfo_query() .and_then(move |c| { - c.raw_execute(TYPEINFO_QUERY, "", &[Type::Oid], &[&oid]) + c.raw_execute(TYPEINFO_QUERY, "", &[OID], &[&oid]) }) .and_then(|c| c.read_rows().collect()) .and_then(move |(r, c)| { let get = |idx| r.get(0).and_then(|r| r.get(idx)); - let name = match String::from_sql_nullable(&Type::Name, get(0)) { + let name = match String::from_sql_nullable(&NAME, get(0)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let type_ = match i8::from_sql_nullable(&Type::Char, get(1)) { + let type_ = match i8::from_sql_nullable(&CHAR, get(1)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let elem_oid = match Oid::from_sql_nullable(&Type::Oid, get(2)) { + let elem_oid = match Oid::from_sql_nullable(&OID, get(2)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let rngsubtype = match Option::::from_sql_nullable(&Type::Oid, get(3)) { + let rngsubtype = match Option::::from_sql_nullable(&OID, get(3)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let basetype = match Oid::from_sql_nullable(&Type::Oid, get(4)) { + let basetype = match Oid::from_sql_nullable(&OID, get(4)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let schema = match String::from_sql_nullable(&Type::Name, get(5)) { + let schema = match String::from_sql_nullable(&NAME, get(5)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let relid = match Oid::from_sql_nullable(&Type::Oid, get(6)) { + let relid = match Oid::from_sql_nullable(&OID, get(6)) { Ok(v) => v, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; @@ -749,7 +749,7 @@ impl Connection { }; Either::B(kind.map( - move |(k, c)| (Other::new(name, oid, k, schema), c), + move |(k, c)| (Type::_new(name, oid, k, schema), c), )) }) .boxed() @@ -802,13 +802,13 @@ impl Connection { fn get_enum_variants(self, oid: Oid) -> BoxFuture<(Vec, Connection), Error> { self.setup_typeinfo_enum_query() .and_then(move |c| { - c.raw_execute(TYPEINFO_ENUM_QUERY, "", &[Type::Oid], &[&oid]) + c.raw_execute(TYPEINFO_ENUM_QUERY, "", &[OID], &[&oid]) }) .and_then(|c| c.read_rows().collect()) .and_then(|(r, c)| { let mut variants = vec![]; for row in r { - let variant = match String::from_sql_nullable(&Type::Name, row.get(0)) { + let variant = match String::from_sql_nullable(&NAME, row.get(0)) { Ok(v) => v, Err(e) => return Err(Error::Conversion(e, c)), }; @@ -854,18 +854,18 @@ impl Connection { fn get_composite_fields(self, oid: Oid) -> BoxFuture<(Vec, Connection), Error> { self.setup_typeinfo_composite_query() .and_then(move |c| { - c.raw_execute(TYPEINFO_COMPOSITE_QUERY, "", &[Type::Oid], &[&oid]) + c.raw_execute(TYPEINFO_COMPOSITE_QUERY, "", &[OID], &[&oid]) }) .and_then(|c| c.read_rows().collect()) .and_then(|(r, c)| { futures::stream::iter(r.into_iter().map(Ok)).fold( (vec![], c), |(mut fields, c), row| { - let name = match String::from_sql_nullable(&Type::Name, row.get(0)) { + let name = match String::from_sql_nullable(&NAME, row.get(0)) { Ok(name) => name, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; - let oid = match Oid::from_sql_nullable(&Type::Oid, row.get(1)) { + let oid = match Oid::from_sql_nullable(&OID, row.get(1)) { Ok(oid) => oid, Err(e) => return Either::A(Err(Error::Conversion(e, c)).into_future()), }; diff --git a/tokio-postgres/src/test.rs b/tokio-postgres/src/test.rs index 5d4ec18c..c2763fb4 100644 --- a/tokio-postgres/src/test.rs +++ b/tokio-postgres/src/test.rs @@ -9,7 +9,7 @@ use super::*; use error::{Error, ConnectError, INVALID_PASSWORD, INVALID_AUTHORIZATION_SPECIFICATION, QUERY_CANCELED}; use params::{ConnectParams, Host}; -use types::{ToSql, FromSql, Type, IsNull, Kind}; +use types::{ToSql, FromSql, Type, IsNull, Kind, BYTEA, TEXT, INT4, NUMERIC}; #[test] fn md5_user() { @@ -318,7 +318,7 @@ fn domain() { fn accepts(ty: &Type) -> bool { match *ty.kind() { - Kind::Domain(Type::Bytea) => ty.name() == "session_id", + Kind::Domain(BYTEA) => ty.name() == "session_id", _ => false, } } @@ -385,11 +385,11 @@ fn composite() { match *type_.kind() { Kind::Composite(ref fields) => { assert_eq!(fields[0].name(), "name"); - assert_eq!(fields[0].type_(), &Type::Text); + assert_eq!(fields[0].type_(), &TEXT); assert_eq!(fields[1].name(), "supplier"); - assert_eq!(fields[1].type_(), &Type::Int4); + assert_eq!(fields[1].type_(), &INT4); assert_eq!(fields[2].name(), "price"); - assert_eq!(fields[2].type_(), &Type::Numeric); + assert_eq!(fields[2].type_(), &NUMERIC); } ref t => panic!("bad type {:?}", t), } diff --git a/tokio-postgres/src/types.rs b/tokio-postgres/src/types.rs index f6135a0a..a4ee18a4 100644 --- a/tokio-postgres/src/types.rs +++ b/tokio-postgres/src/types.rs @@ -1,8 +1,8 @@ //! Postgres types #[doc(inline)] -pub use postgres_shared::types::{Oid, Type, Date, Timestamp, Kind, Field, Other, WasNull, - WrongType, FromSql, IsNull, ToSql}; +// FIXME +pub use postgres_shared::types::*; #[doc(hidden)] pub use postgres_shared::types::__to_sql_checked;