@@ -23,7 +23,7 @@ macro_rules! from_sql_impl {
2323 check_types!( ty, $( $oid) ,+) ;
2424
2525 match raw {
26- Some ( mut raw) => :: postgres:: types:: RawFromSql :: raw_from_sql( & mut raw) . map( Some ) ,
26+ Some ( mut raw) => :: postgres:: types:: RawFromSql :: raw_from_sql( ty , & mut raw) . map( Some ) ,
2727 None => Ok ( None ) ,
2828 }
2929 }
@@ -49,7 +49,7 @@ macro_rules! to_sql_impl {
4949 check_types!( ty, $( $oid) ,+) ;
5050
5151 let mut writer = vec![ ] ;
52- try!( self . raw_to_sql( & mut writer) ) ;
52+ try!( self . raw_to_sql( ty , & mut writer) ) ;
5353 Ok ( Some ( writer) )
5454 }
5555 }
@@ -73,14 +73,14 @@ const RANGE_LOWER_INCLUSIVE: i8 = 0b0000_0010;
7373const RANGE_EMPTY : i8 = 0b0000_0001 ;
7474
7575impl < T > RawFromSql for Range < T > where T : PartialOrd +Normalizable +RawFromSql {
76- fn raw_from_sql < R : Reader > ( rdr : & mut R ) -> postgres:: Result < Range < T > > {
76+ fn raw_from_sql < R : Reader > ( ty : & Type , rdr : & mut R ) -> postgres:: Result < Range < T > > {
7777 let t = try!( rdr. read_i8 ( ) ) ;
7878
7979 if t & RANGE_EMPTY != 0 {
8080 return Ok ( Range :: empty ( ) ) ;
8181 }
8282
83- fn make_bound < S , T , R > ( rdr : & mut R , tag : i8 , bound_flag : i8 , inclusive_flag : i8 )
83+ fn make_bound < S , T , R > ( ty : & Type , rdr : & mut R , tag : i8 , bound_flag : i8 , inclusive_flag : i8 )
8484 -> postgres:: Result < Option < RangeBound < S , T > > >
8585 where S : BoundSided , T : PartialOrd +Normalizable +RawFromSql , R : Reader {
8686 match tag & bound_flag {
@@ -91,7 +91,7 @@ impl<T> RawFromSql for Range<T> where T: PartialOrd+Normalizable+RawFromSql {
9191 } ;
9292 let len = try!( rdr. read_be_i32 ( ) ) as usize ;
9393 let mut limit = LimitReader :: new ( rdr. by_ref ( ) , len) ;
94- let bound = try!( RawFromSql :: raw_from_sql ( & mut limit) ) ;
94+ let bound = try!( RawFromSql :: raw_from_sql ( ty , & mut limit) ) ;
9595 if limit. limit ( ) != 0 {
9696 return Err ( postgres:: Error :: BadData ) ;
9797 }
@@ -101,8 +101,9 @@ impl<T> RawFromSql for Range<T> where T: PartialOrd+Normalizable+RawFromSql {
101101 }
102102 }
103103
104- let lower = try!( make_bound ( rdr, t, RANGE_LOWER_UNBOUNDED , RANGE_LOWER_INCLUSIVE ) ) ;
105- let upper = try!( make_bound ( rdr, t, RANGE_UPPER_UNBOUNDED , RANGE_UPPER_INCLUSIVE ) ) ;
104+ let element_type = ty. element_type ( ) . unwrap ( ) ;
105+ let lower = try!( make_bound ( & element_type, rdr, t, RANGE_LOWER_UNBOUNDED , RANGE_LOWER_INCLUSIVE ) ) ;
106+ let upper = try!( make_bound ( & element_type, rdr, t, RANGE_UPPER_UNBOUNDED , RANGE_UPPER_INCLUSIVE ) ) ;
106107 Ok ( Range :: new ( lower, upper) )
107108 }
108109}
@@ -112,7 +113,7 @@ from_sql_impl!(i64, Type::Int8Range);
112113from_sql_impl ! ( Timespec , Type :: TsRange , Type :: TstzRange ) ;
113114
114115impl < T > RawToSql for Range < T > where T : PartialOrd +Normalizable +RawToSql {
115- fn raw_to_sql < W : Writer > ( & self , buf : & mut W ) -> postgres:: Result < ( ) > {
116+ fn raw_to_sql < W : Writer > ( & self , ty : & Type , buf : & mut W ) -> postgres:: Result < ( ) > {
116117 let mut tag = 0 ;
117118 if self . is_empty ( ) {
118119 tag |= RANGE_EMPTY ;
@@ -131,19 +132,20 @@ impl<T> RawToSql for Range<T> where T: PartialOrd+Normalizable+RawToSql {
131132
132133 try!( buf. write_i8 ( tag) ) ;
133134
134- fn write_value < S , T , W > ( buf : & mut W , v : Option < & RangeBound < S , T > > ) -> postgres:: Result < ( ) >
135+ fn write_value < S , T , W > ( ty : & Type , buf : & mut W , v : Option < & RangeBound < S , T > > ) -> postgres:: Result < ( ) >
135136 where S : BoundSided , T : RawToSql , W : Writer {
136137 if let Some ( bound) = v {
137138 let mut inner_buf = vec ! [ ] ;
138- try!( bound. value . raw_to_sql ( & mut inner_buf) ) ;
139+ try!( bound. value . raw_to_sql ( ty , & mut inner_buf) ) ;
139140 try!( buf. write_be_u32 ( inner_buf. len ( ) as u32 ) ) ;
140141 try!( buf. write ( & * inner_buf) ) ;
141142 }
142143 Ok ( ( ) )
143144 }
144145
145- try!( write_value ( buf, self . lower ( ) ) ) ;
146- try!( write_value ( buf, self . upper ( ) ) ) ;
146+ let element_type = ty. element_type ( ) . unwrap ( ) ;
147+ try!( write_value ( & element_type, buf, self . lower ( ) ) ) ;
148+ try!( write_value ( & element_type, buf, self . upper ( ) ) ) ;
147149
148150 Ok ( ( ) )
149151 }
0 commit comments