samredai commented on code in PR #4815:
URL: https://github.com/apache/iceberg/pull/4815#discussion_r878989810
##########
python/tests/expressions/test_expressions_base.py:
##########
@@ -84,6 +85,65 @@ def __str__(self):
return "testexprb"
+class TestBooleanExpressionVisitor(base.BooleanExpressionVisitor[List]):
+ """A test implementation of a BooleanExpressionVisit
+
+ As this visitor visits each node, it appends an element to a
`visit_histor` list. This enables testing that a given expression is
+ visited in an expected order by the `visit` method.
+ """
+
+ def __init__(self):
+ self.visit_history: List = []
+
+ def visit_true(self) -> List:
+ self.visit_history.append("TRUE")
+ return self.visit_history
+
+ def visit_false(self) -> List:
+ self.visit_history.append("FALSE")
+ return self.visit_history
+
+ def visit_not(self, child_result: List) -> List:
+ self.visit_history.append("NOT")
+ return self.visit_history
+
+ def visit_and(self, left_result: List, right_result: List) -> List:
+ self.visit_history.append("AND")
+ return self.visit_history
+
+ def visit_or(self, left_result: List, right_result: List) -> List:
+ self.visit_history.append("OR")
+ return self.visit_history
+
+ def visit_unbound_predicate(self, predicate) -> List:
+ self.visit_history.append("UNBOUND PREDICATE")
+ return self.visit_history
+
+ def visit_bound_predicate(self, predicate) -> List:
+ self.visit_history.append("BOUND PREDICATE")
+ return self.visit_history
+
+ def visit_test_expression_a(self) -> List:
+ self.visit_history.append("TestExpressionA")
+ return self.visit_history
+
+ def visit_test_expression_b(self) -> List:
+ self.visit_history.append("TestExpressionB")
+ return self.visit_history
+
+
[email protected](TestExpressionA)
+def _(obj: TestExpressionA, visitor: TestBooleanExpressionVisitor) -> List:
+ """Visit a TestExpressionA with a TestBooleanExpressionVisitor"""
+ return visitor.visit_test_expression_a()
+
+
[email protected](TestExpressionB)
+def _(obj: TestExpressionB, visitor: TestBooleanExpressionVisitor) -> List:
Review Comment:
These are only for tests and dispatch a method for `TestExpressionA` and
`TestExpressionB`. Otherwise a `NotImplementedError` would be raised.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]