Skip to content

Commit

Permalink
Remove delim flipped var
Browse files Browse the repository at this point in the history
  • Loading branch information
pdet committed Sep 3, 2024
1 parent 73b072a commit 2dc1721
Show file tree
Hide file tree
Showing 4 changed files with 406 additions and 551 deletions.
19 changes: 10 additions & 9 deletions src/from_substrait.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -441,27 +441,35 @@ shared_ptr<Relation> SubstraitToDuckDB::TransformDelimJoinOp(const substrait::Re
}
duplicate_eliminated_columns_ptr = &duplicate_eliminated_columns;
JoinType djointype;
bool delim_flipped;
switch (sjoin.type()) {
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_INNER:
djointype = JoinType::INNER;
delim_flipped = false;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT:
djointype = JoinType::LEFT;
delim_flipped = false;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT:
djointype = JoinType::RIGHT;
delim_flipped = true;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_SINGLE:
djointype = JoinType::SINGLE;
delim_flipped = false;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT_SEMI:
djointype = JoinType::RIGHT_SEMI;
delim_flipped = true;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_MARK:
djointype = JoinType::MARK;
delim_flipped = false;
break;
case substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT_ANTI:
djointype = JoinType::RIGHT_ANTI;
delim_flipped = true;
break;
default:
throw InternalException("Unsupported join type");
Expand All @@ -471,14 +479,7 @@ shared_ptr<Relation> SubstraitToDuckDB::TransformDelimJoinOp(const substrait::Re
auto right_op = TransformOp(sjoin.right())->Alias("right");
auto join =
make_shared_ptr<JoinRelation>(std::move(left_op), std::move(right_op), std::move(join_condition), djointype);
if (sjoin.duplicate_eliminated_side() == substrait::DuplicateEliminatedJoinRel::DUPLICATE_ELIMINATED_SIDE_RIGHT) {
join->delim_flipped = true;
} else if (sjoin.duplicate_eliminated_side() ==
substrait::DuplicateEliminatedJoinRel::DUPLICATE_ELIMINATED_SIDE_LEFT) {
join->delim_flipped = false;
} else {
throw InvalidInputException("The plan has a delimiter join with an invalid type for it's delimiter side.");
}
join->delim_flipped = delim_flipped;
join->duplicate_eliminated_columns = std::move(duplicate_eliminated_columns);
return join;
}
Expand All @@ -491,7 +492,7 @@ shared_ptr<Relation> SubstraitToDuckDB::TransformDelimGetOp(const substrait::Rel
vector<LogicalType> chunk_types;
auto &input_columns = subtree->Columns();
for (auto &col : *duplicate_eliminated_columns_ptr) {
auto& col_ref = col->Cast<PositionalReferenceExpression>();
auto &col_ref = col->Cast<PositionalReferenceExpression>();
chunk_types.emplace_back(input_columns[col_ref.index - 1].Type());
}
duplicate_eliminated_columns_ptr = nullptr;
Expand Down
21 changes: 15 additions & 6 deletions src/to_substrait.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -951,7 +951,6 @@ substrait::Rel *DuckDBToSubstrait::TransformDelimiterJoin(LogicalOperator &dop)
auto rhs_child = TransformOp(*dop.children[1]);
if (djoin.delim_flipped) {
// right side is where our delim is
sjoin->set_duplicate_eliminated_side(substrait::DuplicateEliminatedJoinRel::DUPLICATE_ELIMINATED_SIDE_RIGHT);
plan.add_relations()->set_allocated_rel(rhs_child);
sjoin->set_allocated_left(lhs_child);
auto rhs_res = new substrait::Rel();
Expand All @@ -960,7 +959,6 @@ substrait::Rel *DuckDBToSubstrait::TransformDelimiterJoin(LogicalOperator &dop)
sjoin->set_allocated_right(rhs_res);
} else {
// left side is where our delim is
sjoin->set_duplicate_eliminated_side(substrait::DuplicateEliminatedJoinRel::DUPLICATE_ELIMINATED_SIDE_LEFT);
plan.add_relations()->set_allocated_rel(lhs_child);
sjoin->set_allocated_right(rhs_child);
auto lhs_res = new substrait::Rel();
Expand Down Expand Up @@ -991,16 +989,27 @@ substrait::Rel *DuckDBToSubstrait::TransformDelimiterJoin(LogicalOperator &dop)
substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT);
break;
case JoinType::SINGLE:
sjoin->set_type(
substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_SINGLE);
if (djoin.delim_flipped) {
sjoin->set_type(substrait::DuplicateEliminatedJoinRel_JoinType::
DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT_SINGLE);

} else {
sjoin->set_type(substrait::DuplicateEliminatedJoinRel_JoinType::
DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_SINGLE);
}
break;
case JoinType::RIGHT_SEMI:
sjoin->set_type(
substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT_SEMI);
break;
case JoinType::MARK:
sjoin->set_type(
substrait::DuplicateEliminatedJoinRel_JoinType::DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_MARK);
if (djoin.delim_flipped) {
sjoin->set_type(substrait::DuplicateEliminatedJoinRel_JoinType::
DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_RIGHT_MARK);
} else {
sjoin->set_type(substrait::DuplicateEliminatedJoinRel_JoinType::
DuplicateEliminatedJoinRel_JoinType_JOIN_TYPE_LEFT_MARK);
}
break;
case JoinType::RIGHT_ANTI:
sjoin->set_type(
Expand Down
Loading

0 comments on commit 2dc1721

Please sign in to comment.