@@ -39,7 +39,7 @@ use vortex::expr::root;
3939use vortex:: expr:: select;
4040use vortex:: layout:: LayoutReader ;
4141use vortex:: metrics:: VortexMetrics ;
42- use vortex:: scan:: ScanBuilder ;
42+ use vortex:: scan:: { ScanBuilder , Selection } ;
4343use vortex:: session:: VortexSession ;
4444use vortex_utils:: aliases:: dash_map:: DashMap ;
4545use vortex_utils:: aliases:: dash_map:: Entry ;
@@ -174,6 +174,7 @@ impl FileOpener for VortexOpener {
174174 let metrics = self . metrics . clone ( ) ;
175175 let layout_reader = self . layout_readers . clone ( ) ;
176176 let has_output_ordering = self . has_output_ordering ;
177+ let extensions = file_meta. extensions . clone ( ) ;
177178
178179 let projected_schema = match projection. as_ref ( ) {
179180 None => logical_schema. clone ( ) ,
@@ -305,6 +306,9 @@ impl FileOpener for VortexOpener {
305306 } ;
306307
307308 let mut scan_builder = ScanBuilder :: new ( session, layout_reader) ;
309+ if let Some ( initial_plan) = create_initial_plan ( extensions) {
310+ scan_builder = scan_builder. with_selection ( initial_plan) ;
311+ }
308312 if let Some ( file_range) = file_meta. range {
309313 scan_builder = apply_byte_range (
310314 file_range,
@@ -407,6 +411,17 @@ fn byte_range_to_row_range(byte_range: Range<u64>, row_count: u64, total_size: u
407411 start_row..u64:: min ( row_count, end_row)
408412}
409413
414+ fn create_initial_plan (
415+ extensions : Option < Arc < dyn std:: any:: Any + Send + Sync > > ,
416+ ) -> Option < Selection > {
417+ if let Some ( extensions) = extensions
418+ && let Some ( selection) = extensions. downcast_ref :: < Selection > ( )
419+ {
420+ return Some ( selection. clone ( ) ) ;
421+ }
422+ None
423+ }
424+
410425#[ cfg( test) ]
411426mod tests {
412427 use std:: sync:: LazyLock ;
0 commit comments