diff --git a/velox/substrait/SubstraitToVeloxPlan.cpp b/velox/substrait/SubstraitToVeloxPlan.cpp index a8e030d1c961..981c07a3d7fd 100644 --- a/velox/substrait/SubstraitToVeloxPlan.cpp +++ b/velox/substrait/SubstraitToVeloxPlan.cpp @@ -167,9 +167,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 b826c5afc49f..915d25ffdf58 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 e0920cd7e7ec..0fc823981431 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;