@@ -27,7 +27,6 @@ use crate::bloom_filter::Sbbf;
2727use crate :: column:: page:: { Page , PageMetadata , PageReader } ;
2828use crate :: compression:: { create_codec, Codec } ;
2929use crate :: errors:: { ParquetError , Result } ;
30- use crate :: file:: page_index:: index_reader;
3130use crate :: file:: page_index:: offset_index:: OffsetIndexMetaData ;
3231use crate :: file:: {
3332 metadata:: * ,
@@ -192,37 +191,22 @@ impl<R: 'static + ChunkReader> SerializedFileReader<R> {
192191 /// Returns error if Parquet file does not exist or is corrupt.
193192 pub fn new_with_options ( chunk_reader : R , options : ReadOptions ) -> Result < Self > {
194193 let mut metadata_builder = ParquetMetaDataReader :: new ( )
194+ . with_page_indexes ( options. enable_page_index )
195195 . parse_and_finish ( & chunk_reader) ?
196196 . into_builder ( ) ;
197+
197198 let mut predicates = options. predicates ;
198199
199200 // Filter row groups based on the predicates
200- for ( i, rg_meta) in metadata_builder. take_row_groups ( ) . into_iter ( ) . enumerate ( ) {
201- let mut keep = true ;
202- for predicate in & mut predicates {
203- if !predicate ( & rg_meta, i) {
204- keep = false ;
205- break ;
201+ if !predicates. is_empty ( ) {
202+ for ( i, rg_meta) in metadata_builder. take_row_groups ( ) . into_iter ( ) . enumerate ( ) {
203+ if predicates
204+ . iter_mut ( )
205+ . all ( |predicate| predicate ( & rg_meta, i) )
206+ {
207+ metadata_builder = metadata_builder. add_row_group ( rg_meta) ;
206208 }
207209 }
208- if keep {
209- metadata_builder = metadata_builder. add_row_group ( rg_meta) ;
210- }
211- }
212-
213- if options. enable_page_index {
214- let mut columns_indexes = vec ! [ ] ;
215- let mut offset_indexes = vec ! [ ] ;
216-
217- for rg in metadata_builder. row_groups ( ) . iter ( ) {
218- let column_index = index_reader:: read_columns_indexes ( & chunk_reader, rg. columns ( ) ) ?;
219- let offset_index = index_reader:: read_offset_indexes ( & chunk_reader, rg. columns ( ) ) ?;
220- columns_indexes. push ( column_index) ;
221- offset_indexes. push ( offset_index) ;
222- }
223- metadata_builder = metadata_builder
224- . set_column_index ( Some ( columns_indexes) )
225- . set_offset_index ( Some ( offset_indexes) ) ;
226210 }
227211
228212 Ok ( Self {
0 commit comments