From f4bb7f0e7c9094ba430c73e7a177858f3ef6ce25 Mon Sep 17 00:00:00 2001 From: PHILO-HE Date: Tue, 25 Apr 2023 14:35:54 +0800 Subject: [PATCH] Support bool type for range filter (#202) --- velox/substrait/SubstraitToVeloxPlan.cpp | 28 ++++++++++++++---------- velox/substrait/TypeUtils.h | 7 ++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/velox/substrait/SubstraitToVeloxPlan.cpp b/velox/substrait/SubstraitToVeloxPlan.cpp index 0973dbe4463d..29e4c7b31acd 100644 --- a/velox/substrait/SubstraitToVeloxPlan.cpp +++ b/velox/substrait/SubstraitToVeloxPlan.cpp @@ -506,23 +506,22 @@ core::PlanNodePtr SubstraitVeloxPlanConverter::toVeloxPlan( std::vector> projectSetExprs; projectSetExprs.reserve(expandRel.fields_size()); - + for (const auto& projections : expandRel.fields()) { std::vector projectExprs; projectExprs.reserve(projections.switching_field().duplicates_size()); - for ( - const auto& projectExpr : projections.switching_field().duplicates()) { + for (const auto& projectExpr : projections.switching_field().duplicates()) { if (projectExpr.has_selection()) { auto expression = - exprConverter_->toVeloxExpr(projectExpr.selection(), inputType); + exprConverter_->toVeloxExpr(projectExpr.selection(), inputType); projectExprs.emplace_back(expression); } else if (projectExpr.has_literal()) { - auto expression = - exprConverter_->toVeloxExpr(projectExpr.literal()); + auto expression = exprConverter_->toVeloxExpr(projectExpr.literal()); projectExprs.emplace_back(expression); } else { - VELOX_FAIL("The project in Expand Operator only support field or literal."); + VELOX_FAIL( + "The project in Expand Operator only support field or literal."); } } projectSetExprs.emplace_back(projectExprs); @@ -536,10 +535,7 @@ core::PlanNodePtr SubstraitVeloxPlanConverter::toVeloxPlan( } return std::make_shared( - nextPlanNodeId(), - projectSetExprs, - std::move(names), - childNode); + nextPlanNodeId(), projectSetExprs, std::move(names), childNode); } const core::WindowNode::Frame createWindowFrame( @@ -1722,6 +1718,12 @@ void SubstraitVeloxPlanConverter::setFilterMap( } setColInfoMap(functionName, colIdxVal, val, reverse, colInfoMap); break; + case TypeKind::BOOLEAN: + if (substraitLit) { + val = variant(substraitLit.value().boolean()); + } + setColInfoMap(functionName, colIdxVal, val, reverse, colInfoMap); + break; case TypeKind::VARCHAR: if (substraitLit) { val = variant(substraitLit.value().string()); @@ -2131,6 +2133,10 @@ connector::hive::SubfieldFilters SubstraitVeloxPlanConverter::mapToFilters( constructSubfieldFilters( colIdx, inputNameList[colIdx], colInfoMap[colIdx], filters); break; + case TypeKind::BOOLEAN: + constructSubfieldFilters( + colIdx, inputNameList[colIdx], colInfoMap[colIdx], filters); + break; case TypeKind::VARCHAR: constructSubfieldFilters( colIdx, inputNameList[colIdx], colInfoMap[colIdx], filters); diff --git a/velox/substrait/TypeUtils.h b/velox/substrait/TypeUtils.h index 401b776f2975..e3add3a6a283 100644 --- a/velox/substrait/TypeUtils.h +++ b/velox/substrait/TypeUtils.h @@ -67,6 +67,13 @@ struct RangeTraits { using NativeType = double; }; +template <> +struct RangeTraits { + using RangeType = common::BigintRange; + using MultiRangeType = common::BigintMultiRange; + using NativeType = bool; +}; + template <> struct RangeTraits { using RangeType = common::BytesRange;