MCPcopy Create free account
hub / github.com/bytedance/bolt / planFilter

Function planFilter

bolt/connectors/paimon/PaimonDataSource.cpp:133–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131}
132
133std::pair<std::shared_ptr<::paimon::Predicate>, core::TypedExprPtr> planFilter(
134 const core::TypedExprPtr& expression,
135 const RowTypePtr& rowType,
136 core::ExpressionEvaluator* evaluator) {
137 std::vector<core::TypedExprPtr> conjuncts;
138 exec::flattenTopLevelConjuncts(expression, conjuncts);
139
140 std::vector<std::shared_ptr<::paimon::Predicate>> predicates;
141 std::vector<core::TypedExprPtr> remainingConjuncts;
142 for (const auto& conjunct : conjuncts) {
143 auto result =
144 PaimonFilterTranslator::translate(conjunct, rowType, evaluator);
145 if (result.ok()) {
146 predicates.push_back(std::move(result.value));
147 } else {
148 VLOG(1) << "PaimonDataSource: Keeping filter conjunct "
149 << conjunct->toString()
150 << " as remaining filter: " << result.reason;
151 remainingConjuncts.push_back(conjunct);
152 }
153 }
154
155 std::shared_ptr<::paimon::Predicate> predicate;
156 if (predicates.size() == 1) {
157 predicate = std::move(predicates.front());
158 } else if (!predicates.empty()) {
159 auto result = ::paimon::PredicateBuilder::And(predicates);
160 BOLT_CHECK(
161 result.ok(), "PredicateBuilder::And failed for translated conjuncts");
162 predicate = std::move(result).value();
163 }
164
165 return {
166 std::move(predicate), combineConjuncts(std::move(remainingConjuncts))};
167}
168
169} // namespace
170

Callers 1

PaimonDataSourceMethod · 0.85

Calls 8

flattenTopLevelConjunctsFunction · 0.85
combineConjunctsFunction · 0.85
okMethod · 0.45
push_backMethod · 0.45
toStringMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected