@@ -54,17 +54,17 @@ pub fn seedable_rng() -> StdRng {
5454    StdRng :: seed_from_u64 ( 42 ) 
5555} 
5656
57- fn  build_plain_encoded_int32_page_iterator ( 
57+ fn  build_encoded_int32_page_iterator ( 
5858    schema :  SchemaDescPtr , 
5959    column_desc :  ColumnDescPtr , 
6060    null_density :  f32 , 
61+     encoding :  Encoding , 
6162)  -> impl  PageIterator  + Clone  { 
6263    let  max_def_level = column_desc. max_def_level ( ) ; 
6364    let  max_rep_level = column_desc. max_rep_level ( ) ; 
6465    let  rep_levels = vec ! [ 0 ;  VALUES_PER_PAGE ] ; 
6566    let  mut  rng = seedable_rng ( ) ; 
6667    let  mut  pages:  Vec < Vec < parquet:: column:: page:: Page > >  = Vec :: new ( ) ; 
67-     let  mut  int32_value = 0 ; 
6868    for  _i in  0 ..NUM_ROW_GROUPS  { 
6969        let  mut  column_chunk_pages = Vec :: new ( ) ; 
7070        for  _j in  0 ..PAGES_PER_GROUP  { 
@@ -78,16 +78,15 @@ fn build_plain_encoded_int32_page_iterator(
7878                    max_def_level
7979                } ; 
8080                if  def_level == max_def_level { 
81-                     int32_value += 1 ; 
82-                     values. push ( int32_value) ; 
81+                     values. push ( rng. gen_range ( 0 ..1000 ) ) ; 
8382                } 
8483                def_levels. push ( def_level) ; 
8584            } 
8685            let  mut  page_builder =
8786                DataPageBuilderImpl :: new ( column_desc. clone ( ) ,  values. len ( )  as  u32 ,  true ) ; 
8887            page_builder. add_rep_levels ( max_rep_level,  & rep_levels) ; 
8988            page_builder. add_def_levels ( max_def_level,  & def_levels) ; 
90-             page_builder. add_values :: < Int32Type > ( Encoding :: PLAIN ,  & values) ; 
89+             page_builder. add_values :: < Int32Type > ( encoding ,  & values) ; 
9190            column_chunk_pages. push ( page_builder. consume ( ) ) ; 
9291        } 
9392        pages. push ( column_chunk_pages) ; 
@@ -332,9 +331,7 @@ fn create_complex_object_byte_array_dictionary_reader(
332331    page_iterator :  impl  PageIterator  + ' static , 
333332    column_desc :  ColumnDescPtr , 
334333)  -> Box < dyn  ArrayReader >  { 
335-     use  parquet:: arrow:: array_reader:: { 
336-         make_byte_array_dictionary_reader,  ComplexObjectArrayReader , 
337-     } ; 
334+     use  parquet:: arrow:: array_reader:: ComplexObjectArrayReader ; 
338335    use  parquet:: arrow:: converter:: { Utf8ArrayConverter ,  Utf8Converter } ; 
339336    let  arrow_type =
340337        DataType :: Dictionary ( Box :: new ( DataType :: Int32 ) ,  Box :: new ( DataType :: Utf8 ) ) ; 
@@ -367,10 +364,11 @@ fn add_benches(c: &mut Criterion) {
367364    // ============================= 
368365
369366    // int32, plain encoded, no NULLs 
370-     let  plain_int32_no_null_data = build_plain_encoded_int32_page_iterator ( 
367+     let  plain_int32_no_null_data = build_encoded_int32_page_iterator ( 
371368        schema. clone ( ) , 
372369        mandatory_int32_column_desc. clone ( ) , 
373370        0.0 , 
371+         Encoding :: PLAIN , 
374372    ) ; 
375373    group. bench_function ( "read Int32Array, plain encoded, mandatory, no NULLs" ,  |b| { 
376374        b. iter ( || { 
@@ -383,10 +381,11 @@ fn add_benches(c: &mut Criterion) {
383381        assert_eq ! ( count,  EXPECTED_VALUE_COUNT ) ; 
384382    } ) ; 
385383
386-     let  plain_int32_no_null_data = build_plain_encoded_int32_page_iterator ( 
384+     let  plain_int32_no_null_data = build_encoded_int32_page_iterator ( 
387385        schema. clone ( ) , 
388386        optional_int32_column_desc. clone ( ) , 
389387        0.0 , 
388+         Encoding :: PLAIN , 
390389    ) ; 
391390    group. bench_function ( "read Int32Array, plain encoded, optional, no NULLs" ,  |b| { 
392391        b. iter ( || { 
@@ -400,10 +399,11 @@ fn add_benches(c: &mut Criterion) {
400399    } ) ; 
401400
402401    // int32, plain encoded, half NULLs 
403-     let  plain_int32_half_null_data = build_plain_encoded_int32_page_iterator ( 
402+     let  plain_int32_half_null_data = build_encoded_int32_page_iterator ( 
404403        schema. clone ( ) , 
405404        optional_int32_column_desc. clone ( ) , 
406405        0.5 , 
406+         Encoding :: PLAIN , 
407407    ) ; 
408408    group. bench_function ( 
409409        "read Int32Array, plain encoded, optional, half NULLs" , 
@@ -419,6 +419,62 @@ fn add_benches(c: &mut Criterion) {
419419        } , 
420420    ) ; 
421421
422+     // int32, binary packed, no NULLs 
423+     let  plain_int32_no_null_data = build_encoded_int32_page_iterator ( 
424+         schema. clone ( ) , 
425+         mandatory_int32_column_desc. clone ( ) , 
426+         0.0 , 
427+         Encoding :: DELTA_BINARY_PACKED , 
428+     ) ; 
429+     group. bench_function ( "read Int32Array, binary packed, mandatory, no NULLs" ,  |b| { 
430+         b. iter ( || { 
431+             let  array_reader = create_int32_primitive_array_reader ( 
432+                 plain_int32_no_null_data. clone ( ) , 
433+                 mandatory_int32_column_desc. clone ( ) , 
434+             ) ; 
435+             count = bench_array_reader ( array_reader) ; 
436+         } ) ; 
437+         assert_eq ! ( count,  EXPECTED_VALUE_COUNT ) ; 
438+     } ) ; 
439+ 
440+     let  plain_int32_no_null_data = build_encoded_int32_page_iterator ( 
441+         schema. clone ( ) , 
442+         optional_int32_column_desc. clone ( ) , 
443+         0.0 , 
444+         Encoding :: DELTA_BINARY_PACKED , 
445+     ) ; 
446+     group. bench_function ( "read Int32Array, binary packed, optional, no NULLs" ,  |b| { 
447+         b. iter ( || { 
448+             let  array_reader = create_int32_primitive_array_reader ( 
449+                 plain_int32_no_null_data. clone ( ) , 
450+                 optional_int32_column_desc. clone ( ) , 
451+             ) ; 
452+             count = bench_array_reader ( array_reader) ; 
453+         } ) ; 
454+         assert_eq ! ( count,  EXPECTED_VALUE_COUNT ) ; 
455+     } ) ; 
456+ 
457+     // int32, binary packed, half NULLs 
458+     let  plain_int32_half_null_data = build_encoded_int32_page_iterator ( 
459+         schema. clone ( ) , 
460+         optional_int32_column_desc. clone ( ) , 
461+         0.5 , 
462+         Encoding :: DELTA_BINARY_PACKED , 
463+     ) ; 
464+     group. bench_function ( 
465+         "read Int32Array, binary packed, optional, half NULLs" , 
466+         |b| { 
467+             b. iter ( || { 
468+                 let  array_reader = create_int32_primitive_array_reader ( 
469+                     plain_int32_half_null_data. clone ( ) , 
470+                     optional_int32_column_desc. clone ( ) , 
471+                 ) ; 
472+                 count = bench_array_reader ( array_reader) ; 
473+             } ) ; 
474+             assert_eq ! ( count,  EXPECTED_VALUE_COUNT ) ; 
475+         } , 
476+     ) ; 
477+ 
422478    // int32, dictionary encoded, no NULLs 
423479    let  dictionary_int32_no_null_data = build_dictionary_encoded_int32_page_iterator ( 
424480        schema. clone ( ) , 
0 commit comments