diff --git a/datafusion/datasource/src/source.rs b/datafusion/datasource/src/source.rs index 756b2b479116..92c25556382c 100644 --- a/datafusion/datasource/src/source.rs +++ b/datafusion/datasource/src/source.rs @@ -30,6 +30,7 @@ use datafusion_physical_plan::projection::ProjectionExec; use datafusion_physical_plan::{ DisplayAs, DisplayFormatType, ExecutionPlan, PlanProperties, }; +use itertools::Itertools; use crate::file_scan_config::FileScanConfig; use datafusion_common::config::ConfigOptions; @@ -340,8 +341,17 @@ impl ExecutionPlan for DataSourceExec { new_node.data_source = data_source; new_node.cache = Self::compute_properties(Arc::clone(&new_node.data_source)); + // Recompute equivalence info using new filters - let filter = conjunction(res.filters.collect_supported()); + let filter = conjunction( + res.filters + .iter() + .filter_map(|f| match f { + PredicateSupport::Supported(expr) => Some(Arc::clone(expr)), + PredicateSupport::Unsupported(_) => None, + }) + .collect_vec(), + ); new_node = new_node.add_filter_equivalence_info(filter)?; Ok(FilterPushdownPropagation { filters: res.filters,