@@ -28,7 +28,6 @@ use futures::FutureExt;
2828use futures:: StreamExt ;
2929use futures:: TryStreamExt ;
3030use futures:: stream;
31- use object_store:: ObjectStore ;
3231use object_store:: path:: Path ;
3332use tracing:: Instrument ;
3433use vortex:: array:: ArrayRef ;
@@ -44,6 +43,7 @@ use vortex_utils::aliases::dash_map::Entry;
4443
4544use super :: cache:: VortexFileCache ;
4645use crate :: VortexAccessPlan ;
46+ use crate :: VortexReaderFactory ;
4747use crate :: convert:: exprs:: ExpressionConvertor ;
4848use crate :: convert:: exprs:: ProcessedProjection ;
4949use crate :: convert:: exprs:: make_vortex_predicate;
@@ -53,7 +53,7 @@ use crate::persistent::stream::PrunableStream;
5353#[ derive( Clone ) ]
5454pub ( crate ) struct VortexOpener {
5555 pub session : VortexSession ,
56- pub object_store : Arc < dyn ObjectStore > ,
56+ pub vortex_reader_factory : Arc < dyn VortexReaderFactory > ,
5757 /// Optional table schema projection. The indices are w.r.t. the `table_schema`, which is
5858 /// all fields in the final scan result not including the partition columns.
5959 pub projection : ProjectionExprs ,
@@ -90,11 +90,14 @@ pub(crate) struct VortexOpener {
9090impl FileOpener for VortexOpener {
9191 fn open ( & self , file : PartitionedFile ) -> DFResult < FileOpenFuture > {
9292 let session = self . session . clone ( ) ;
93- let object_store = self . object_store . clone ( ) ;
9493
9594 let mut projection = self . projection . clone ( ) ;
9695 let mut filter = self . filter . clone ( ) ;
9796
97+ let reader = self
98+ . vortex_reader_factory
99+ . create_reader ( file. path ( ) . as_ref ( ) , & session) ?;
100+
98101 let file_pruning_predicate = self . file_pruning_predicate . clone ( ) ;
99102 let expr_adapter_factory = self . expr_adapter_factory . clone ( ) ;
100103
@@ -158,7 +161,7 @@ impl FileOpener for VortexOpener {
158161 }
159162
160163 let vxf = file_cache
161- . try_get ( & file. object_meta , object_store )
164+ . try_get ( & file. object_meta , reader )
162165 . await
163166 . map_err ( |e| exec_datafusion_err ! ( "Failed to open Vortex file {e}" ) ) ?;
164167
@@ -382,6 +385,7 @@ fn byte_range_to_row_range(byte_range: Range<u64>, row_count: u64, total_size: u
382385
383386#[ cfg( test) ]
384387mod tests {
388+ use std:: sync:: Arc ;
385389 use std:: sync:: LazyLock ;
386390
387391 use arrow_schema:: Field ;
@@ -407,6 +411,7 @@ mod tests {
407411 use datafusion_physical_expr:: projection:: ProjectionExpr ;
408412 use insta:: assert_snapshot;
409413 use itertools:: Itertools ;
414+ use object_store:: ObjectStore ;
410415 use object_store:: memory:: InMemory ;
411416 use rstest:: rstest;
412417 use vortex:: VortexSessionDefault ;
@@ -419,6 +424,7 @@ mod tests {
419424 use vortex:: session:: VortexSession ;
420425
421426 use super :: * ;
427+ use crate :: DefaultVortexReaderFactory ;
422428 use crate :: VortexAccessPlan ;
423429 use crate :: convert:: exprs:: DefaultExpressionConvertor ;
424430
@@ -491,7 +497,7 @@ mod tests {
491497 ) -> VortexOpener {
492498 VortexOpener {
493499 session : SESSION . clone ( ) ,
494- object_store,
500+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store) ) ,
495501 projection : ProjectionExprs :: from_indices ( & [ 0 ] , table_schema. file_schema ( ) ) ,
496502 filter,
497503 file_pruning_predicate : None ,
@@ -583,7 +589,7 @@ mod tests {
583589
584590 let make_opener = |filter| VortexOpener {
585591 session : SESSION . clone ( ) ,
586- object_store : object_store. clone ( ) ,
592+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store. clone ( ) ) ) ,
587593 projection : ProjectionExprs :: from_indices ( & [ 0 ] , table_schema. file_schema ( ) ) ,
588594 filter : Some ( filter) ,
589595 file_pruning_predicate : None ,
@@ -666,7 +672,7 @@ mod tests {
666672
667673 let opener = VortexOpener {
668674 session : SESSION . clone ( ) ,
669- object_store : object_store . clone ( ) ,
675+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store ) ) ,
670676 projection : ProjectionExprs :: from_indices ( & [ 0 , 1 , 2 ] , & table_schema) ,
671677 filter : None ,
672678 file_pruning_predicate : None ,
@@ -815,7 +821,7 @@ mod tests {
815821
816822 let opener = VortexOpener {
817823 session : SESSION . clone ( ) ,
818- object_store : object_store. clone ( ) ,
824+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store. clone ( ) ) ) ,
819825 projection : ProjectionExprs :: from_indices (
820826 projection. as_ref ( ) ,
821827 table_schema. file_schema ( ) ,
@@ -874,7 +880,7 @@ mod tests {
874880 ) -> VortexOpener {
875881 VortexOpener {
876882 session : SESSION . clone ( ) ,
877- object_store,
883+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store) ) ,
878884 projection,
879885 filter : None ,
880886 file_pruning_predicate : None ,
@@ -1072,7 +1078,7 @@ mod tests {
10721078
10731079 let opener = VortexOpener {
10741080 session : SESSION . clone ( ) ,
1075- object_store : object_store. clone ( ) ,
1081+ vortex_reader_factory : Arc :: new ( DefaultVortexReaderFactory :: new ( object_store. clone ( ) ) ) ,
10761082 projection,
10771083 filter : None ,
10781084 file_pruning_predicate : None ,
0 commit comments