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

Method makeNotEqualFilter

bolt/expression/ExprToSubfieldFilter.cpp:220–266  ·  view source on GitHub ↗

static

Source from the content-addressed store, hash-verified

218
219// static
220std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeNotEqualFilter(
221 const core::TypedExprPtr& valueExpr,
222 core::ExpressionEvaluator* evaluator) {
223 auto value = toConstant(valueExpr, evaluator);
224 if (!value) {
225 return nullptr;
226 }
227
228 std::unique_ptr<common::Filter> lessThanFilter =
229 makeLessThanFilter(valueExpr, evaluator);
230 if (!lessThanFilter) {
231 return nullptr;
232 }
233 std::unique_ptr<common::Filter> greaterThanFilter =
234 makeGreaterThanFilter(valueExpr, evaluator);
235 if (!greaterThanFilter) {
236 return nullptr;
237 }
238
239 if (value->typeKind() == TypeKind::TINYINT ||
240 value->typeKind() == TypeKind::SMALLINT ||
241 value->typeKind() == TypeKind::INTEGER ||
242 value->typeKind() == TypeKind::BIGINT) {
243 // Cast lessThanFilter and greaterThanFilter to
244 // std::unique_ptr<common::BigintRange>.
245 std::vector<std::unique_ptr<common::BigintRange>> ranges;
246 auto lessRange =
247 dynamic_cast<common::BigintRange*>(lessThanFilter.release());
248 BOLT_CHECK_NOT_NULL(lessRange, "Less-than range is null");
249 ranges.emplace_back(std::unique_ptr<common::BigintRange>(lessRange));
250
251 auto greaterRange =
252 dynamic_cast<common::BigintRange*>(greaterThanFilter.release());
253 BOLT_CHECK_NOT_NULL(greaterRange, "Greater-than range is null");
254 ranges.emplace_back(std::unique_ptr<common::BigintRange>(greaterRange));
255
256 return std::make_unique<common::BigintMultiRange>(std::move(ranges), false);
257 } else if (value->typeKind() == TypeKind::HUGEINT) {
258 BOLT_NYI();
259 } else {
260 std::vector<std::unique_ptr<common::Filter>> filters;
261 filters.emplace_back(std::move(lessThanFilter));
262 filters.emplace_back(std::move(greaterThanFilter));
263 return std::make_unique<common::MultiRange>(
264 std::move(filters), false, false);
265 }
266}
267
268// static
269std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeEqualFilter(

Callers

nothing calls this directly

Calls 3

toConstantFunction · 0.85
typeKindMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected