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

Method makeInFilter

bolt/expression/ExprToSubfieldFilter.cpp:430–478  ·  view source on GitHub ↗

static

Source from the content-addressed store, hash-verified

428
429// static
430std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeInFilter(
431 const core::TypedExprPtr& expr,
432 core::ExpressionEvaluator* evaluator,
433 bool negated) {
434 auto vector = toConstant(expr, evaluator);
435 if (!(vector && vector->type()->isArray())) {
436 return nullptr;
437 }
438
439 auto arrayVector = vector->valueVector()->as<ArrayVector>();
440 auto index = vector->as<ConstantVector<ComplexType>>()->index();
441 auto offset = arrayVector->offsetAt(index);
442 auto size = arrayVector->sizeAt(index);
443 auto elements = arrayVector->elements();
444
445 auto elementType = arrayVector->type()->asArray().elementType();
446 switch (elementType->kind()) {
447 case TypeKind::TINYINT: {
448 auto values = toInt64List<int8_t>(elements, offset, size);
449 return negated ? notIn(values) : in(values);
450 }
451 case TypeKind::SMALLINT: {
452 auto values = toInt64List<int16_t>(elements, offset, size);
453 return negated ? notIn(values) : in(values);
454 }
455 case TypeKind::INTEGER: {
456 auto values = toInt64List<int32_t>(elements, offset, size);
457 return negated ? notIn(values) : in(values);
458 }
459 case TypeKind::BIGINT: {
460 auto values = toInt64List<int64_t>(elements, offset, size);
461 return negated ? notIn(values) : in(values);
462 }
463 case TypeKind::VARCHAR: {
464 auto stringElements = elements->as<SimpleVector<StringView>>();
465 std::vector<std::string> values;
466 values.reserve(size);
467 for (auto i = 0; i < size; i++) {
468 values.push_back(std::string(stringElements->valueAt(offset + i)));
469 }
470 if (negated) {
471 return notIn(values);
472 }
473 return in(values);
474 }
475 default:
476 return nullptr;
477 }
478}
479
480// static
481std::unique_ptr<common::Filter> ExprToSubfieldFilterParser::makeBetweenFilter(

Callers

nothing calls this directly

Calls 12

toConstantFunction · 0.85
notInFunction · 0.85
inFunction · 0.85
offsetAtMethod · 0.80
sizeAtMethod · 0.80
asArrayMethod · 0.80
typeMethod · 0.45
indexMethod · 0.45
kindMethod · 0.45
reserveMethod · 0.45
push_backMethod · 0.45
valueAtMethod · 0.45

Tested by

no test coverage detected