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

Method leafCallToSubfieldFilter

bolt/expression/ExprToSubfieldFilter.cpp:580–653  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

578} // namespace
579
580std::optional<std::pair<common::Subfield, std::unique_ptr<common::Filter>>>
581PrestoExprToSubfieldFilterParser::leafCallToSubfieldFilter(
582 const core::CallTypedExpr& call,
583 core::ExpressionEvaluator* evaluator,
584 bool negated) {
585 if (call.inputs().empty()) {
586 return std::nullopt;
587 }
588
589 const auto* leftSide = call.inputs()[0].get();
590
591 common::Subfield subfield;
592 if (call.name() == "eq") {
593 if (toSubfield(leftSide, subfield)) {
594 auto filter = negated ? makeNotEqualFilter(call.inputs()[1], evaluator)
595 : makeEqualFilter(call.inputs()[1], evaluator);
596
597 return combine(subfield, filter);
598 }
599 } else if (call.name() == "neq") {
600 if (toSubfield(leftSide, subfield)) {
601 auto filter = negated ? makeEqualFilter(call.inputs()[1], evaluator)
602 : makeNotEqualFilter(call.inputs()[1], evaluator);
603 return combine(subfield, filter);
604 }
605 } else if (call.name() == "lte") {
606 if (toSubfield(leftSide, subfield)) {
607 auto filter = negated
608 ? makeGreaterThanFilter(call.inputs()[1], evaluator)
609 : makeLessThanOrEqualFilter(call.inputs()[1], evaluator);
610 return combine(subfield, filter);
611 }
612 } else if (call.name() == "lt") {
613 if (toSubfield(leftSide, subfield)) {
614 auto filter = negated
615 ? makeGreaterThanOrEqualFilter(call.inputs()[1], evaluator)
616 : makeLessThanFilter(call.inputs()[1], evaluator);
617 return combine(subfield, filter);
618 }
619 } else if (call.name() == "gte") {
620 if (toSubfield(leftSide, subfield)) {
621 auto filter = negated
622 ? makeLessThanFilter(call.inputs()[1], evaluator)
623 : makeGreaterThanOrEqualFilter(call.inputs()[1], evaluator);
624 return combine(subfield, filter);
625 }
626 } else if (call.name() == "gt") {
627 if (toSubfield(leftSide, subfield)) {
628 auto filter = negated
629 ? makeLessThanOrEqualFilter(call.inputs()[1], evaluator)
630 : makeGreaterThanFilter(call.inputs()[1], evaluator);
631 return combine(subfield, filter);
632 }
633 } else if (call.name() == "between") {
634 if (toSubfield(leftSide, subfield)) {
635 auto filter = makeBetweenFilter(
636 call.inputs()[1], call.inputs()[2], evaluator, negated);
637 return combine(subfield, filter);

Callers 3

fromExpressionMethod · 0.45
toSubfieldFilterFunction · 0.45

Calls 6

isNullFunction · 0.85
combineFunction · 0.70
isNotNullFunction · 0.70
emptyMethod · 0.45
getMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected