diff --git a/crates/core/src/delta_datafusion/table_provider.rs b/crates/core/src/delta_datafusion/table_provider.rs index b5132996c0..c33474a050 100644 --- a/crates/core/src/delta_datafusion/table_provider.rs +++ b/crates/core/src/delta_datafusion/table_provider.rs @@ -29,6 +29,7 @@ use datafusion::logical_expr::utils::split_conjunction; use datafusion::logical_expr::{BinaryExpr, LogicalPlan, Operator}; use datafusion::optimizer::simplify_expressions::ExprSimplifier; use datafusion::physical_optimizer::pruning::PruningPredicate; +use datafusion::physical_plan::filter_pushdown::{FilterDescription, FilterPushdownPhase}; use datafusion::physical_plan::metrics::{ExecutionPlanMetricsSet, MetricBuilder, MetricsSet}; use datafusion::physical_plan::{ stream::RecordBatchStreamAdapter, DisplayAs, DisplayFormatType, ExecutionPlan, PhysicalExpr, @@ -980,6 +981,18 @@ impl ExecutionPlan for DeltaScan { fn partition_statistics(&self, partition: Option) -> Result { self.parquet_scan.partition_statistics(partition) } + + fn gather_filters_for_pushdown( + &self, + _phase: FilterPushdownPhase, + parent_filters: Vec>, + _config: &ConfigOptions, + ) -> Result { + Ok(FilterDescription::from_children( + parent_filters, + &self.children(), + )?) + } } /// The logical schema for a Deltatable is different from the protocol level schema since partition