From 9dadd497b11591fe3ee3b3b6ac715ddbe597954a Mon Sep 17 00:00:00 2001 From: Rui Mo Date: Thu, 20 Oct 2022 05:05:36 +0000 Subject: [PATCH] Support right semi join type (#53) Support right semi join type in Substrait. --- velox/substrait/SubstraitToVeloxPlan.cpp | 5 ++++- velox/substrait/SubstraitToVeloxPlanValidator.cpp | 3 ++- velox/substrait/proto/substrait/algebra.proto | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/velox/substrait/SubstraitToVeloxPlan.cpp b/velox/substrait/SubstraitToVeloxPlan.cpp index c876864765cb1..3022a927060fa 100644 --- a/velox/substrait/SubstraitToVeloxPlan.cpp +++ b/velox/substrait/SubstraitToVeloxPlan.cpp @@ -151,9 +151,12 @@ core::PlanNodePtr SubstraitVeloxPlanConverter::toVeloxPlan( case ::substrait::JoinRel_JoinType::JoinRel_JoinType_JOIN_TYPE_RIGHT: joinType = core::JoinType::kRight; break; - case ::substrait::JoinRel_JoinType::JoinRel_JoinType_JOIN_TYPE_SEMI: + case ::substrait::JoinRel_JoinType::JoinRel_JoinType_JOIN_TYPE_LEFT_SEMI: joinType = core::JoinType::kLeftSemi; break; + case ::substrait::JoinRel_JoinType::JoinRel_JoinType_JOIN_TYPE_RIGHT_SEMI: + joinType = core::JoinType::kRightSemi; + break; case ::substrait::JoinRel_JoinType::JoinRel_JoinType_JOIN_TYPE_ANTI: joinType = core::JoinType::kNullAwareAnti; break; diff --git a/velox/substrait/SubstraitToVeloxPlanValidator.cpp b/velox/substrait/SubstraitToVeloxPlanValidator.cpp index b826c5afc49f5..915d25ffdf58a 100644 --- a/velox/substrait/SubstraitToVeloxPlanValidator.cpp +++ b/velox/substrait/SubstraitToVeloxPlanValidator.cpp @@ -224,7 +224,8 @@ bool SubstraitToVeloxPlanValidator::validate( case ::substrait::JoinRel_JoinType_JOIN_TYPE_OUTER: case ::substrait::JoinRel_JoinType_JOIN_TYPE_LEFT: case ::substrait::JoinRel_JoinType_JOIN_TYPE_RIGHT: - case ::substrait::JoinRel_JoinType_JOIN_TYPE_SEMI: + case ::substrait::JoinRel_JoinType_JOIN_TYPE_LEFT_SEMI: + case ::substrait::JoinRel_JoinType_JOIN_TYPE_RIGHT_SEMI: case ::substrait::JoinRel_JoinType_JOIN_TYPE_ANTI: break; default: diff --git a/velox/substrait/proto/substrait/algebra.proto b/velox/substrait/proto/substrait/algebra.proto index e0920cd7e7ec4..0fc823981431d 100644 --- a/velox/substrait/proto/substrait/algebra.proto +++ b/velox/substrait/proto/substrait/algebra.proto @@ -169,11 +169,12 @@ message JoinRel { JOIN_TYPE_OUTER = 2; JOIN_TYPE_LEFT = 3; JOIN_TYPE_RIGHT = 4; - JOIN_TYPE_SEMI = 5; - JOIN_TYPE_ANTI = 6; + JOIN_TYPE_LEFT_SEMI = 5; + JOIN_TYPE_RIGHT_SEMI = 6; + JOIN_TYPE_ANTI = 7; // This join is useful for nested sub-queries where we need exactly one tuple in output (or throw exception) // See Section 3.2 of https://15721.courses.cs.cmu.edu/spring2018/papers/16-optimizer2/hyperjoins-btw2017.pdf - JOIN_TYPE_SINGLE = 7; + JOIN_TYPE_SINGLE = 8; } substrait.extensions.AdvancedExtension advanced_extension = 10;