@@ -25,7 +25,7 @@ macro_rules! from_sql_impl {
2525 check_types!( ty, $( $oid) ,+) ;
2626
2727 match raw {
28- Some ( mut raw) => :: postgres:: types:: RawFromSql :: raw_from_sql( & mut raw) . map( Some ) ,
28+ Some ( mut raw) => :: postgres:: types:: RawFromSql :: raw_from_sql( ty , & mut raw) . map( Some ) ,
2929 None => Ok ( None ) ,
3030 }
3131 }
@@ -70,7 +70,7 @@ macro_rules! to_sql_impl {
7070mod uuid;
7171
7272impl < T > RawFromSql for ArrayBase < Option < T > > where T : RawFromSql {
73- fn raw_from_sql < R : Reader > ( raw : & mut R ) -> postgres:: Result < ArrayBase < Option < T > > > {
73+ fn raw_from_sql < R : Reader > ( ty : & Type , raw : & mut R ) -> postgres:: Result < ArrayBase < Option < T > > > {
7474 let ndim = try!( raw. read_be_u32 ( ) ) as usize ;
7575 let _has_null = try!( raw. read_be_i32 ( ) ) == 1 ;
7676 let _element_type: Oid = try!( raw. read_be_u32 ( ) ) ;
@@ -95,7 +95,8 @@ impl<T> RawFromSql for ArrayBase<Option<T>> where T: RawFromSql {
9595 elements. push ( None ) ;
9696 } else {
9797 let mut limit = LimitReader :: new ( raw. by_ref ( ) , len as usize ) ;
98- elements. push ( Some ( try!( RawFromSql :: raw_from_sql ( & mut limit) ) ) ) ;
98+ elements. push ( Some ( try!( RawFromSql :: raw_from_sql ( & ty. element_type ( ) . unwrap ( ) ,
99+ & mut limit) ) ) ) ;
99100 if limit. limit ( ) != 0 {
100101 return Err ( Error :: BadData ) ;
101102 }
@@ -123,7 +124,7 @@ fn raw_to_array<T>(array: &ArrayBase<Option<T>>, ty: &Type) -> Vec<u8> where T:
123124
124125 let _ = buf. write_be_i32 ( array. dimension_info ( ) . len ( ) as i32 ) ;
125126 let _ = buf. write_be_i32 ( 1 ) ;
126- let _ = buf. write_be_u32 ( ty. member_type ( ) . to_oid ( ) ) ;
127+ let _ = buf. write_be_u32 ( ty. element_type ( ) . unwrap ( ) . to_oid ( ) ) ;
127128
128129 for info in array. dimension_info ( ) . iter ( ) {
129130 let _ = buf. write_be_i32 ( info. len as i32 ) ;
@@ -134,7 +135,7 @@ fn raw_to_array<T>(array: &ArrayBase<Option<T>>, ty: &Type) -> Vec<u8> where T:
134135 match * v {
135136 Some ( ref val) => {
136137 let mut inner_buf = vec ! [ ] ;
137- let _ = val. raw_to_sql ( & mut inner_buf) ;
138+ let _ = val. raw_to_sql ( & ty . element_type ( ) . unwrap ( ) , & mut inner_buf) ;
138139 let _ = buf. write_be_i32 ( inner_buf. len ( ) as i32 ) ;
139140 let _ = buf. write ( & * inner_buf) ;
140141 }
0 commit comments