Skip to content

Commit 7b2ecbb

Browse files
committed
remove other changes
1 parent 1ce4889 commit 7b2ecbb

2 files changed

Lines changed: 0 additions & 112 deletions

File tree

pyiceberg/expressions/visitors.py

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -938,82 +938,6 @@ def translate_column_names(
938938
return visit(expr, _ColumnNameTranslator(file_schema, case_sensitive, projected_fields))
939939

940940

941-
class _ProjectedColumnsEvaluator(BooleanExpressionVisitor[BooleanExpression]):
942-
"""Evaluated predicates which involve projected columns missing from the file.
943-
944-
Args:
945-
file_schema (Schema): The schema of the file.
946-
projected_schema (Schema): The schema to project onto the data files.
947-
case_sensitive (bool): Whether to consider case when binding a reference to a field in a schema, defaults to True.
948-
projected_missing_fields(dict[str, Any]): Map of fields missing in file_schema, but present as partition values.
949-
950-
Raises:
951-
TypeError: In the case of an UnboundPredicate.
952-
"""
953-
954-
file_schema: Schema
955-
case_sensitive: bool
956-
957-
def __init__(
958-
self, file_schema: Schema, projected_schema: Schema, case_sensitive: bool, projected_missing_fields: dict[str, Any]
959-
) -> None:
960-
self.file_schema = file_schema
961-
self.projected_schema = projected_schema
962-
self.case_sensitive = case_sensitive
963-
self.projected_missing_fields = projected_missing_fields
964-
965-
def visit_true(self) -> BooleanExpression:
966-
return AlwaysTrue()
967-
968-
def visit_false(self) -> BooleanExpression:
969-
return AlwaysFalse()
970-
971-
def visit_not(self, child_result: BooleanExpression) -> BooleanExpression:
972-
return Not(child=child_result)
973-
974-
def visit_and(self, left_result: BooleanExpression, right_result: BooleanExpression) -> BooleanExpression:
975-
return And(left=left_result, right=right_result)
976-
977-
def visit_or(self, left_result: BooleanExpression, right_result: BooleanExpression) -> BooleanExpression:
978-
return Or(left=left_result, right=right_result)
979-
980-
def visit_unbound_predicate(self, predicate: UnboundPredicate[L]) -> BooleanExpression:
981-
raise TypeError(f"Expected Bound Predicate, got: {predicate.term}")
982-
983-
def visit_bound_predicate(self, predicate: BoundPredicate[L]) -> BooleanExpression:
984-
file_column_name = self.file_schema.find_column_name(predicate.term.ref().field.field_id)
985-
986-
if file_column_name is None and (field_name := predicate.term.ref().field.name) in self.projected_missing_fields:
987-
unbound_predicate: BooleanExpression
988-
if isinstance(predicate, BoundUnaryPredicate):
989-
unbound_predicate = predicate.as_unbound(field_name)
990-
elif isinstance(predicate, BoundLiteralPredicate):
991-
unbound_predicate = predicate.as_unbound(field_name, predicate.literal)
992-
elif isinstance(predicate, BoundSetPredicate):
993-
unbound_predicate = predicate.as_unbound(field_name, predicate.literals)
994-
else:
995-
raise ValueError(f"Unsupported predicate: {predicate}")
996-
field = self.projected_schema.find_field(field_name)
997-
schema = Schema(field)
998-
evaluator = expression_evaluator(schema, unbound_predicate, self.case_sensitive)
999-
if evaluator(Record(self.projected_missing_fields[field_name])):
1000-
return AlwaysTrue()
1001-
else:
1002-
return AlwaysFalse()
1003-
1004-
return predicate
1005-
1006-
1007-
def evaluate_projected_columns(
1008-
expr: BooleanExpression,
1009-
file_schema: Schema,
1010-
projected_schema: Schema,
1011-
case_sensitive: bool,
1012-
projected_missing_fields: dict[str, Any],
1013-
) -> BooleanExpression:
1014-
return visit(expr, _ProjectedColumnsEvaluator(file_schema, projected_schema, case_sensitive, projected_missing_fields))
1015-
1016-
1017941
class _ExpressionFieldIDs(BooleanExpressionVisitor[Set[int]]):
1018942
"""Extracts the field IDs used in the BooleanExpression."""
1019943

tests/expressions/test_visitors.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@
6868
BooleanExpressionVisitor,
6969
BoundBooleanExpressionVisitor,
7070
_ManifestEvalVisitor,
71-
bind,
72-
evaluate_projected_columns,
7371
expression_evaluator,
7472
expression_to_plain_format,
7573
rewrite_not,
@@ -1625,37 +1623,3 @@ def test_expression_evaluator_null() -> None:
16251623
assert expression_evaluator(schema, LessThan("a", 1), case_sensitive=True)(struct) is False
16261624
assert expression_evaluator(schema, StartsWith("a", 1), case_sensitive=True)(struct) is False
16271625
assert expression_evaluator(schema, NotStartsWith("a", 1), case_sensitive=True)(struct) is True
1628-
1629-
1630-
@pytest.mark.parametrize(
1631-
"before_expression,after_expression",
1632-
[
1633-
(In("id", {1, 2, 3}), AlwaysTrue()),
1634-
(EqualTo("id", 3), AlwaysFalse()),
1635-
(
1636-
And(EqualTo("id", 1), EqualTo("all_same_value_or_null", "string")),
1637-
And(AlwaysTrue(), EqualTo("all_same_value_or_null", "string")),
1638-
),
1639-
(
1640-
And(EqualTo("all_same_value_or_null", "string"), GreaterThan("id", 2)),
1641-
And(EqualTo("all_same_value_or_null", "string"), AlwaysFalse()),
1642-
),
1643-
(
1644-
Or(
1645-
And(EqualTo("id", 1), EqualTo("all_same_value_or_null", "string")),
1646-
And(EqualTo("all_same_value_or_null", "string"), GreaterThan("id", 2)),
1647-
),
1648-
Or(
1649-
And(AlwaysTrue(), EqualTo("all_same_value_or_null", "string")),
1650-
And(EqualTo("all_same_value_or_null", "string"), AlwaysFalse()),
1651-
),
1652-
),
1653-
],
1654-
)
1655-
def test_eval_projected_fields(schema: Schema, before_expression: BooleanExpression, after_expression: BooleanExpression) -> None:
1656-
# exclude id from file_schema pretending that it's part of partition values
1657-
file_schema = Schema(*[field for field in schema.columns if field.name != "id"])
1658-
projected_missing_fields = {"id": 1}
1659-
assert evaluate_projected_columns(
1660-
bind(schema, before_expression, True), file_schema, schema, True, projected_missing_fields
1661-
) == bind(schema, after_expression, True)

0 commit comments

Comments
 (0)