Skip to content

Commit 7599c4e

Browse files
committed
Clean up get_type
1 parent 1b5c79e commit 7599c4e

File tree

1 file changed

+26
-63
lines changed

1 file changed

+26
-63
lines changed

src/lib.rs

Lines changed: 26 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -818,71 +818,34 @@ impl InnerConnection {
818818
return Ok(Type::Other(ty.clone()));
819819
}
820820

821-
// Ew @ doing this manually :(
822-
let mut buf = vec![];
823-
let value = match try!(oid.to_sql_checked(&Type::Oid, &mut buf, &SessionInfo::new(self))) {
824-
IsNull::Yes => None,
825-
IsNull::No => Some(buf),
826-
};
827-
try!(self.write_messages(&[Bind {
828-
portal: "",
829-
statement: TYPEINFO_QUERY,
830-
formats: &[1],
831-
values: &[value],
832-
result_formats: &[1],
833-
},
834-
Execute {
835-
portal: "",
836-
max_rows: 0,
837-
},
838-
Sync]));
839-
match try!(self.read_message()) {
840-
BindComplete => {}
841-
ErrorResponse { fields } => {
842-
try!(self.wait_for_ready());
843-
return DbError::new(fields);
844-
}
845-
_ => bad_response!(self),
846-
}
847-
let (name, type_, elem_oid, rngsubtype, basetype, schema) = match try!(self.read_message()) {
848-
DataRow { row } => {
849-
let ctx = SessionInfo::new(self);
850-
let name = try!(String::from_sql(&Type::Name,
851-
&mut &**row[0].as_ref().unwrap(),
852-
&ctx));
853-
let type_ = try!(i8::from_sql(&Type::Char,
854-
&mut &**row[1].as_ref().unwrap(),
821+
try!(self.raw_execute(TYPEINFO_QUERY, "", 0, &[Type::Oid], &[&oid]));
822+
let mut rows = VecDeque::new();
823+
try!(self.read_rows(&mut rows));
824+
let row = rows.pop_front().unwrap();
825+
826+
let (name, type_, elem_oid, rngsubtype, basetype, schema) = {
827+
let ctx = SessionInfo::new(self);
828+
let name = try!(String::from_sql(&Type::Name,
829+
&mut &**row[0].as_ref().unwrap(),
830+
&ctx));
831+
let type_ = try!(i8::from_sql(&Type::Char,
832+
&mut &**row[1].as_ref().unwrap(),
833+
&ctx));
834+
let elem_oid = try!(Oid::from_sql(&Type::Oid,
835+
&mut &**row[2].as_ref().unwrap(),
855836
&ctx));
856-
let elem_oid = try!(Oid::from_sql(&Type::Oid,
857-
&mut &**row[2].as_ref().unwrap(),
858-
&ctx));
859-
let rngsubtype = match row[3] {
860-
Some(ref data) => try!(Option::<Oid>::from_sql(&Type::Oid, &mut &**data, &ctx)),
861-
None => try!(Option::<Oid>::from_sql_null(&Type::Oid, &ctx)),
862-
};
863-
let basetype = try!(Oid::from_sql(&Type::Oid,
864-
&mut &**row[4].as_ref().unwrap(),
865-
&ctx));
866-
let schema = try!(String::from_sql(&Type::Name,
867-
&mut &**row[5].as_ref().unwrap(),
868-
&ctx));
869-
(name, type_, elem_oid, rngsubtype, basetype, schema)
870-
}
871-
ErrorResponse { fields } => {
872-
try!(self.wait_for_ready());
873-
return DbError::new(fields);
874-
}
875-
_ => bad_response!(self),
837+
let rngsubtype = match row[3] {
838+
Some(ref data) => try!(Option::<Oid>::from_sql(&Type::Oid, &mut &**data, &ctx)),
839+
None => try!(Option::<Oid>::from_sql_null(&Type::Oid, &ctx)),
840+
};
841+
let basetype = try!(Oid::from_sql(&Type::Oid,
842+
&mut &**row[4].as_ref().unwrap(),
843+
&ctx));
844+
let schema = try!(String::from_sql(&Type::Name,
845+
&mut &**row[5].as_ref().unwrap(),
846+
&ctx));
847+
(name, type_, elem_oid, rngsubtype, basetype, schema)
876848
};
877-
match try!(self.read_message()) {
878-
CommandComplete { .. } => {}
879-
ErrorResponse { fields } => {
880-
try!(self.wait_for_ready());
881-
return DbError::new(fields);
882-
}
883-
_ => bad_response!(self),
884-
}
885-
try!(self.wait_for_ready());
886849

887850
let kind = if type_ == b'e' as i8 {
888851
Kind::Enum

0 commit comments

Comments
 (0)