@@ -8,7 +8,7 @@ use parquet2::{
88
99use  crate :: types:: i256; 
1010use  crate :: { 
11-     array:: { Array ,  DictionaryKey ,  MutablePrimitiveArray ,  PrimitiveArray } , 
11+     array:: { Array ,  DictionaryKey ,  MutablePrimitiveArray ,  PrimitiveArray ,   BinaryArray } , 
1212    datatypes:: { DataType ,  IntervalUnit ,  TimeUnit } , 
1313    error:: { Error ,  Result } , 
1414    types:: { days_ms,  NativeType } , 
@@ -230,6 +230,36 @@ pub fn page_iter_to_arrays<'a, I: Pages + 'a>(
230230
231231            Box :: new ( arrays)  as  _ 
232232        } 
233+         ( PhysicalType :: ByteArray ,  Decimal ( _,  _) )  => { 
234+             let  pages = binary:: Iter :: < i32 ,  _ > :: new ( 
235+                 pages, 
236+                 DataType :: Binary , 
237+                 chunk_size, 
238+                 num_rows, 
239+             ) ; 
240+ 
241+             let  pages = pages. map ( move  |maybe_array| { 
242+                 let  array = maybe_array?; 
243+                 let  array_len = array. len ( ) ; 
244+                 let  array = array. as_any ( ) . downcast_ref :: < BinaryArray < i32 > > ( ) . unwrap ( ) ; 
245+                 let  values = ( 0 ..array_len) . map ( |i| { 
246+                     let  value = array. value ( i) ; 
247+                     let  n = value. len ( ) ; 
248+                     if  n > 16  { 
249+                         return  Err ( Error :: Overflow ) ; 
250+                     } 
251+                     Ok ( super :: super :: convert_i128 ( value,  n) ) 
252+                 } ) 
253+                 . collect :: < Result < Vec < _ > > > ( ) ; 
254+                 let  validity = array. validity ( ) . cloned ( ) ; 
255+ 
256+                 PrimitiveArray :: < i128 > :: try_new ( data_type. clone ( ) ,  values?. into ( ) ,  validity) 
257+             } ) ; 
258+ 
259+             let  arrays = pages. map ( |x| x. map ( |x| x. boxed ( ) ) ) ; 
260+ 
261+             Box :: new ( arrays)  as  _ 
262+         } 
233263        ( PhysicalType :: Int32 ,  Decimal256 ( _,  _) )  => dyn_iter ( iden ( primitive:: IntegerIter :: new ( 
234264            pages, 
235265            data_type, 
0 commit comments