Skip to content

Commit 94bfec1

Browse files
committed
feat: enhance VortexOpener with selection support in ScanBuilder
Signed-off-by: Huaijin <[email protected]>
1 parent c631d4c commit 94bfec1

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

vortex-datafusion/src/persistent/opener.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use vortex::expr::root;
3939
use vortex::expr::select;
4040
use vortex::layout::LayoutReader;
4141
use vortex::metrics::VortexMetrics;
42-
use vortex::scan::ScanBuilder;
42+
use vortex::scan::{ScanBuilder, Selection};
4343
use vortex::session::VortexSession;
4444
use vortex_utils::aliases::dash_map::DashMap;
4545
use 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)]
411426
mod tests {
412427
use std::sync::LazyLock;

0 commit comments

Comments
 (0)