@@ -818,71 +818,34 @@ impl InnerConnection {
818
818
return Ok ( Type :: Other ( ty. clone ( ) ) ) ;
819
819
}
820
820
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 ( ) ,
855
836
& 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)
876
848
} ;
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 ( ) ) ;
886
849
887
850
let kind = if type_ == b'e' as i8 {
888
851
Kind :: Enum
0 commit comments