diff --git a/src/iceberg/expression/binder.cc b/src/iceberg/expression/binder.cc index 650dc730d..9474151d7 100644 --- a/src/iceberg/expression/binder.cc +++ b/src/iceberg/expression/binder.cc @@ -85,9 +85,13 @@ Result IsBoundVisitor::IsBound(const std::shared_ptr& expr) { return Visit(expr, visitor); } -Result IsBoundVisitor::AlwaysTrue() { return true; } +Result IsBoundVisitor::AlwaysTrue() { + return InvalidExpression("IsBoundVisitor does not support AlwaysTrue expression"); +} -Result IsBoundVisitor::AlwaysFalse() { return true; } +Result IsBoundVisitor::AlwaysFalse() { + return InvalidExpression("IsBoundVisitor does not support AlwaysFalse expression"); +} Result IsBoundVisitor::Not(bool child_result) { return child_result; } diff --git a/src/iceberg/test/expression_visitor_test.cc b/src/iceberg/test/expression_visitor_test.cc index 697c0096a..97d70d7a8 100644 --- a/src/iceberg/test/expression_visitor_test.cc +++ b/src/iceberg/test/expression_visitor_test.cc @@ -296,14 +296,14 @@ TEST_F(BinderTest, ErrorNestedUnboundField) { class IsBoundVisitorTest : public ExpressionVisitorTest {}; TEST_F(IsBoundVisitorTest, Constants) { - // True and False are always considered bound + // True and False should error out auto true_expr = Expressions::AlwaysTrue(); - ICEBERG_UNWRAP_OR_FAIL(auto is_bound_true, IsBoundVisitor::IsBound(true_expr)); - EXPECT_TRUE(is_bound_true); + auto result_true = IsBoundVisitor::IsBound(true_expr); + EXPECT_THAT(result_true, IsError(ErrorKind::kInvalidExpression)); auto false_expr = Expressions::AlwaysFalse(); - ICEBERG_UNWRAP_OR_FAIL(auto is_bound_false, IsBoundVisitor::IsBound(false_expr)); - EXPECT_TRUE(is_bound_false); + auto result_false = IsBoundVisitor::IsBound(false_expr); + EXPECT_THAT(result_false, IsError(ErrorKind::kInvalidExpression)); } TEST_F(IsBoundVisitorTest, UnboundPredicate) {