|
68 | 68 | BooleanExpressionVisitor, |
69 | 69 | BoundBooleanExpressionVisitor, |
70 | 70 | _ManifestEvalVisitor, |
| 71 | + bind, |
71 | 72 | expression_evaluator, |
72 | 73 | expression_to_plain_format, |
73 | 74 | rewrite_not, |
74 | 75 | rewrite_to_dnf, |
| 76 | + translate_column_names, |
75 | 77 | visit, |
76 | 78 | visit_bound_predicate, |
77 | 79 | ) |
@@ -1623,3 +1625,40 @@ def test_expression_evaluator_null() -> None: |
1623 | 1625 | assert expression_evaluator(schema, LessThan("a", 1), case_sensitive=True)(struct) is False |
1624 | 1626 | assert expression_evaluator(schema, StartsWith("a", 1), case_sensitive=True)(struct) is False |
1625 | 1627 | 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