Skip to content

Commit 6dee045

Browse files
author
Roman Shanin
committed
add test to check projected field predicate evaluator
1 parent 32a0df7 commit 6dee045

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

tests/expressions/test_visitors.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,12 @@
6868
BooleanExpressionVisitor,
6969
BoundBooleanExpressionVisitor,
7070
_ManifestEvalVisitor,
71+
bind,
7172
expression_evaluator,
7273
expression_to_plain_format,
7374
rewrite_not,
7475
rewrite_to_dnf,
76+
translate_column_names,
7577
visit,
7678
visit_bound_predicate,
7779
)
@@ -1623,3 +1625,40 @@ def test_expression_evaluator_null() -> None:
16231625
assert expression_evaluator(schema, LessThan("a", 1), case_sensitive=True)(struct) is False
16241626
assert expression_evaluator(schema, StartsWith("a", 1), case_sensitive=True)(struct) is False
16251627
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_translate_column_names_eval_projected_fields(
1656+
schema: Schema, before_expression: BooleanExpression, after_expression: BooleanExpression
1657+
) -> None:
1658+
# exclude id from file_schema pretending that it's part of partition values
1659+
file_schema = Schema(*[field for field in schema.columns if field.name != "id"])
1660+
projected_missing_fields = {"id": 1}
1661+
assert (
1662+
translate_column_names(bind(schema, before_expression, True), file_schema, schema, True, projected_missing_fields)
1663+
== after_expression
1664+
)

0 commit comments

Comments
 (0)