@@ -25,7 +25,7 @@ macro_rules! from_sql_impl {
25
25
check_types!( ty, $( $oid) ,+) ;
26
26
27
27
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 ) ,
29
29
None => Ok ( None ) ,
30
30
}
31
31
}
@@ -70,7 +70,7 @@ macro_rules! to_sql_impl {
70
70
mod uuid;
71
71
72
72
impl < 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 > > > {
74
74
let ndim = try!( raw. read_be_u32 ( ) ) as usize ;
75
75
let _has_null = try!( raw. read_be_i32 ( ) ) == 1 ;
76
76
let _element_type: Oid = try!( raw. read_be_u32 ( ) ) ;
@@ -95,7 +95,8 @@ impl<T> RawFromSql for ArrayBase<Option<T>> where T: RawFromSql {
95
95
elements. push ( None ) ;
96
96
} else {
97
97
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) ) ) ) ;
99
100
if limit. limit ( ) != 0 {
100
101
return Err ( Error :: BadData ) ;
101
102
}
@@ -123,7 +124,7 @@ fn raw_to_array<T>(array: &ArrayBase<Option<T>>, ty: &Type) -> Vec<u8> where T:
123
124
124
125
let _ = buf. write_be_i32 ( array. dimension_info ( ) . len ( ) as i32 ) ;
125
126
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 ( ) ) ;
127
128
128
129
for info in array. dimension_info ( ) . iter ( ) {
129
130
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:
134
135
match * v {
135
136
Some ( ref val) => {
136
137
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) ;
138
139
let _ = buf. write_be_i32 ( inner_buf. len ( ) as i32 ) ;
139
140
let _ = buf. write ( & * inner_buf) ;
140
141
}
0 commit comments