@@ -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