Skip to content

Commit f27df43

Browse files
committed
fix: ignore non-existent columns when adding filter equivalence info in FileScanConfig
1 parent 351675d commit f27df43

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

datafusion/datasource/src/file_scan_config.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,11 @@ impl DataSource for FileScanConfig {
590590
// Note that this will *ignore* any non-projected columns: these don't factor into ordering / equivalence.
591591
match reassign_predicate_columns(filter, &schema, true) {
592592
Ok(filter) => {
593-
match Self::add_filter_equivalence_info(filter, &mut eq_properties) {
593+
match Self::add_filter_equivalence_info(
594+
filter,
595+
&mut eq_properties,
596+
&schema,
597+
) {
594598
Ok(()) => {}
595599
Err(e) => {
596600
warn!("Failed to add filter equivalence info: {e}");
@@ -758,9 +762,24 @@ impl FileScanConfig {
758762
fn add_filter_equivalence_info(
759763
filter: Arc<dyn PhysicalExpr>,
760764
eq_properties: &mut EquivalenceProperties,
765+
schema: &Schema,
761766
) -> Result<()> {
767+
macro_rules! ignore_dangling_col {
768+
($col:expr) => {
769+
if let Some(col) = $col.as_any().downcast_ref::<Column>() {
770+
if schema.index_of(col.name()).is_err() {
771+
continue;
772+
}
773+
}
774+
};
775+
}
776+
762777
let (equal_pairs, _) = collect_columns_from_predicate(&filter);
763778
for (lhs, rhs) in equal_pairs {
779+
// Ignore any binary expressions that reference non-existent columns in the current schema
780+
// (e.g. due to unnecessary projections being removed)
781+
ignore_dangling_col!(lhs);
782+
ignore_dangling_col!(rhs);
764783
eq_properties.add_equal_conditions(Arc::clone(lhs), Arc::clone(rhs))?
765784
}
766785
Ok(())

0 commit comments

Comments
 (0)