36 static Result<std::shared_ptr<Expression>> Bind(
const Schema& schema,
37 const std::shared_ptr<Expression>& expr,
40 Result<std::shared_ptr<Expression>> AlwaysTrue()
override;
41 Result<std::shared_ptr<Expression>> AlwaysFalse()
override;
42 Result<std::shared_ptr<Expression>>
Not(
43 const std::shared_ptr<Expression>& child_result)
override;
44 Result<std::shared_ptr<Expression>>
And(
45 const std::shared_ptr<Expression>& left_result,
46 const std::shared_ptr<Expression>& right_result)
override;
47 Result<std::shared_ptr<Expression>>
Or(
48 const std::shared_ptr<Expression>& left_result,
49 const std::shared_ptr<Expression>& right_result)
override;
50 Result<std::shared_ptr<Expression>>
Predicate(
51 const std::shared_ptr<BoundPredicate>& pred)
override;
52 Result<std::shared_ptr<Expression>>
Predicate(
53 const std::shared_ptr<UnboundPredicate>& pred)
override;
54 Result<std::shared_ptr<Expression>>
Aggregate(
55 const std::shared_ptr<BoundAggregate>& aggregate)
override;
56 Result<std::shared_ptr<Expression>>
Aggregate(
57 const std::shared_ptr<UnboundAggregate>& aggregate)
override;
61 const bool case_sensitive_;
66 static Result<bool> IsBound(
const std::shared_ptr<Expression>& expr);
68 Result<bool> AlwaysTrue()
override;
69 Result<bool> AlwaysFalse()
override;
70 Result<bool>
Not(
bool child_result)
override;
71 Result<bool>
And(
bool left_result,
bool right_result)
override;
72 Result<bool>
Or(
bool left_result,
bool right_result)
override;
73 Result<bool>
Predicate(
const std::shared_ptr<BoundPredicate>& pred)
override;
74 Result<bool>
Predicate(
const std::shared_ptr<UnboundPredicate>& pred)
override;
75 Result<bool>
Aggregate(
const std::shared_ptr<BoundAggregate>& aggregate)
override;
76 Result<bool>
Aggregate(
const std::shared_ptr<UnboundAggregate>& aggregate)
override;
84 static Result<std::unordered_set<int32_t>> GetReferencedFieldIds(
85 const std::shared_ptr<Expression>& expr);
87 Result<FieldIdsSetRef> AlwaysTrue()
override;
88 Result<FieldIdsSetRef> AlwaysFalse()
override;
89 Result<FieldIdsSetRef>
Not(
const FieldIdsSetRef& child_result)
override;
90 Result<FieldIdsSetRef>
And(
const FieldIdsSetRef& left_result,
91 const FieldIdsSetRef& right_result)
override;
92 Result<FieldIdsSetRef>
Or(
const FieldIdsSetRef& left_result,
93 const FieldIdsSetRef& right_result)
override;
94 Result<FieldIdsSetRef>
Predicate(
const std::shared_ptr<BoundPredicate>& pred)
override;
96 const std::shared_ptr<UnboundPredicate>& pred)
override;
98 const std::shared_ptr<BoundAggregate>& aggregate)
override;
100 const std::shared_ptr<UnboundAggregate>& aggregate)
override;
103 std::unordered_set<int32_t> referenced_field_ids_;