@@ -870,9 +870,10 @@ class _ColumnNameTranslator(BooleanExpressionVisitor[BooleanExpression]):
870870 file_schema : Schema
871871 case_sensitive : bool
872872
873- def __init__ (self , file_schema : Schema , case_sensitive : bool ) -> None :
873+ def __init__ (self , file_schema : Schema , case_sensitive : bool , projected_missing_fields : dict [ str , Any ] ) -> None :
874874 self .file_schema = file_schema
875875 self .case_sensitive = case_sensitive
876+ self .projected_missing_fields = projected_missing_fields
876877
877878 def visit_true (self ) -> BooleanExpression :
878879 return AlwaysTrue ()
@@ -894,12 +895,17 @@ def visit_unbound_predicate(self, predicate: UnboundPredicate[L]) -> BooleanExpr
894895
895896 def visit_bound_predicate (self , predicate : BoundPredicate [L ]) -> BooleanExpression :
896897 file_column_name = self .file_schema .find_column_name (predicate .term .ref ().field .field_id )
898+ field_name = predicate .term .ref ().field .name
897899
898900 if file_column_name is None :
899901 # In the case of schema evolution, the column might not be present
900902 # in the file schema when reading older data
901903 if isinstance (predicate , BoundIsNull ):
902904 return AlwaysTrue ()
905+ # Projected fields are only available for identity partition fields
906+ # Which mean that partition pruning excluded partition field which evaluates to false
907+ elif field_name in self .projected_missing_fields :
908+ return AlwaysTrue ()
903909 else :
904910 return AlwaysFalse ()
905911
@@ -913,8 +919,8 @@ def visit_bound_predicate(self, predicate: BoundPredicate[L]) -> BooleanExpressi
913919 raise ValueError (f"Unsupported predicate: { predicate } " )
914920
915921
916- def translate_column_names (expr : BooleanExpression , file_schema : Schema , case_sensitive : bool ) -> BooleanExpression :
917- return visit (expr , _ColumnNameTranslator (file_schema , case_sensitive ))
922+ def translate_column_names (expr : BooleanExpression , file_schema : Schema , case_sensitive : bool , projected_missing_fields : dict [ str , Any ] ) -> BooleanExpression :
923+ return visit (expr , _ColumnNameTranslator (file_schema , case_sensitive , projected_missing_fields ))
918924
919925
920926class _ExpressionFieldIDs (BooleanExpressionVisitor [Set [int ]]):
0 commit comments