Skip to content

Commit 218ff8e

Browse files
author
dvlascenco
committed
feat: delta engine injection support
1 parent 08c2fb1 commit 218ff8e

3 files changed

Lines changed: 17 additions & 3 deletions

File tree

crates/core/src/delta_datafusion/engine/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ mod expressions;
1515
mod file_formats;
1616
mod storage;
1717

18+
/// Wraps a custom [`Engine`] for injection into a DataFusion session config extension.
19+
#[derive(Clone)]
20+
pub struct InjectedEngine(pub Arc<dyn Engine>);
21+
1822
/// A Datafusion based Kernel Engine
1923
#[derive(Clone)]
2024
pub struct DataFusionEngine {

crates/core/src/delta_datafusion/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ pub use cdf::scan::DeltaCdfTableProvider;
7272
pub(crate) use data_validation::{
7373
DataValidationExec, constraints_to_exprs, generated_columns_to_exprs, validation_predicates,
7474
};
75+
pub use engine::{DataFusionEngine, InjectedEngine};
7576
pub(crate) use find_files::*;
7677
pub use table_provider::{
7778
DeltaScan, DeltaScanConfig, DeltaScanConfigBuilder, DeltaTableProvider, TableProviderBuilder,

crates/core/src/delta_datafusion/table_provider/next/mod.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ use datafusion::{
4040
physical_plan::ExecutionPlan,
4141
};
4242
use datafusion::catalog::{ScanArgs, ScanResult};
43+
use delta_kernel::Engine;
4344
use delta_kernel::table_configuration::TableConfiguration;
4445
use serde::{Deserialize, Serialize};
4546

4647
pub use self::scan::{DeltaScanExec, DeltaNextPhysicalCodec};
4748
pub(crate) use self::scan::KernelScanPlan;
4849
use crate::delta_datafusion::DeltaScanConfig;
49-
use crate::delta_datafusion::engine::DataFusionEngine;
50+
use crate::delta_datafusion::engine::{DataFusionEngine, InjectedEngine};
5051
use crate::delta_datafusion::table_provider::TableProviderBuilder;
5152
use crate::kernel::{EagerSnapshot, Snapshot};
5253

@@ -175,7 +176,11 @@ impl TableProvider for DeltaScan {
175176
filters: &[Expr],
176177
limit: Option<usize>,
177178
) -> Result<Arc<dyn ExecutionPlan>> {
178-
let engine = DataFusionEngine::new_from_session(session);
179+
let engine: Arc<dyn Engine> = session
180+
.config()
181+
.get_extension::<InjectedEngine>()
182+
.map(|e| e.0.clone())
183+
.unwrap_or_else(|| DataFusionEngine::new_from_session(session));
179184

180185
// Filter out file_id column from projection if present
181186
let file_id_idx = self
@@ -218,7 +223,11 @@ impl TableProvider for DeltaScan {
218223
}
219224

220225
async fn scan_with_args<'a>(&self, state: &dyn Session, args: ScanArgs<'a>) -> Result<ScanResult> {
221-
let engine = DataFusionEngine::new_from_session(state);
226+
let engine: Arc<dyn Engine> = state
227+
.config()
228+
.get_extension::<InjectedEngine>()
229+
.map(|e| e.0.clone())
230+
.unwrap_or_else(|| DataFusionEngine::new_from_session(state));
222231

223232
// Filter out file_id column from projection if present
224233
let file_id_idx = self

0 commit comments

Comments
 (0)