Skip to content

Commit

Permalink
[native] Add more semi- and anti-join e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mbasmanova committed Nov 11, 2022
1 parent f43daa2 commit 79dde4b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 10 deletions.
30 changes: 20 additions & 10 deletions presto_cpp/main/types/PrestoToVeloxQueryPlan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1121,12 +1121,6 @@ core::PlanNodePtr VeloxQueryPlanConverter::toVeloxQueryPlan(
}
}

if (!joinType.has_value()) {
VELOX_UNSUPPORTED(
"Unsupported Filter over SemiJoin: {}",
toJsonString(node->predicate));
}

std::vector<core::FieldAccessTypedExprPtr> leftKeys = {
exprConverter_.toVeloxExpr(semiJoin->sourceJoinVariable)};
std::vector<core::FieldAccessTypedExprPtr> rightKeys = {
Expand All @@ -1139,10 +1133,26 @@ core::PlanNodePtr VeloxQueryPlanConverter::toVeloxQueryPlan(
const auto& leftNames = left->outputType()->names();
const auto& leftTypes = left->outputType()->children();

std::vector<std::string> names;
names.reserve(leftNames.size() + 1);
std::copy(leftNames.begin(), leftNames.end(), std::back_inserter(names));
names.emplace_back(semiJoin->semiJoinOutput.name);
auto names = leftNames;
names.push_back(semiJoin->semiJoinOutput.name);

if (!joinType.has_value()) {
auto types = leftTypes;
types.push_back(BOOLEAN());

return std::make_shared<core::FilterNode>(
node->id,
exprConverter_.toVeloxExpr(node->predicate),
std::make_shared<core::HashJoinNode>(
semiJoin->id,
core::JoinType::kLeftSemiProject,
leftKeys,
rightKeys,
nullptr, // filter
left,
right,
ROW(std::move(names), std::move(types))));
}

std::vector<core::TypedExprPtr> projections;
projections.reserve(leftNames.size() + 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ public void testSemiJoin()

assertQuery(partitionedJoin, "SELECT * FROM lineitem WHERE orderkey IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
assertQuery(broadcastJoin, "SELECT * FROM lineitem WHERE orderkey IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");

assertQuery(partitionedJoin, "SELECT * FROM lineitem " +
"WHERE linenumber = 3 OR orderkey IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
assertQuery(broadcastJoin, "SELECT linenumber, quantity FROM lineitem " +
"WHERE linenumber = 3 OR orderkey IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
}

@Test
Expand All @@ -64,6 +69,11 @@ public void testAntiJoin()

assertQuery(partitionedJoin, "SELECT * FROM lineitem WHERE orderkey NOT IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
assertQuery(broadcastJoin, "SELECT * FROM lineitem WHERE orderkey NOT IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");

assertQuery(partitionedJoin, "SELECT * FROM lineitem " +
"WHERE linenumber = 3 OR orderkey NOT IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
assertQuery(broadcastJoin, "SELECT * FROM lineitem " +
"WHERE linenumber = 3 OR orderkey NOT IN (SELECT orderkey FROM orders WHERE (orderkey + custkey) % 2 = 0)");
}

@Test
Expand Down

0 comments on commit 79dde4b

Please sign in to comment.