Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions be/src/pipeline/dependency.h
Original file line number Diff line number Diff line change
Expand Up @@ -647,8 +647,8 @@ struct PartitionedHashJoinSharedState

struct NestedLoopJoinSharedState : public JoinSharedState {
ENABLE_FACTORY_CREATOR(NestedLoopJoinSharedState)
// if true, left child has no more rows to process
bool left_side_eos = false;
// if true, probe child has no more rows to process
bool probe_side_eos = false;
// Visited flags for each row in build side.
vectorized::MutableColumns build_side_visited_flags;
// List of build blocks, constructed in prepare()
Expand Down
14 changes: 7 additions & 7 deletions be/src/pipeline/exec/nested_loop_join_build_operator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ NestedLoopJoinBuildSinkOperatorX::NestedLoopJoinBuildSinkOperatorX(ObjectPool* p
const DescriptorTbl& descs)
: JoinBuildSinkOperatorX<NestedLoopJoinBuildSinkLocalState>(pool, operator_id, dest_id,
tnode, descs),
_is_output_left_side_only(tnode.nested_loop_join_node.__isset.is_output_left_side_only &&
tnode.nested_loop_join_node.is_output_left_side_only),
_is_output_probe_side_only(tnode.nested_loop_join_node.__isset.is_output_left_side_only &&
tnode.nested_loop_join_node.is_output_left_side_only),
_row_descriptor(descs, tnode.row_tuples) {}

Status NestedLoopJoinBuildSinkOperatorX::init(const TPlanNode& tnode, RuntimeState* state) {
Expand Down Expand Up @@ -113,11 +113,11 @@ Status NestedLoopJoinBuildSinkOperatorX::sink(doris::RuntimeState* state, vector

if (eos) {
// optimize `in bitmap`, see https://github.com/apache/doris/issues/14338
if (_is_output_left_side_only && ((_join_op == TJoinOp::type::LEFT_SEMI_JOIN &&
local_state._shared_state->build_blocks.empty()) ||
(_join_op == TJoinOp::type::LEFT_ANTI_JOIN &&
!local_state._shared_state->build_blocks.empty()))) {
local_state._shared_state->left_side_eos = true;
if (_is_output_probe_side_only && ((_join_op == TJoinOp::type::LEFT_SEMI_JOIN &&
local_state._shared_state->build_blocks.empty()) ||
(_join_op == TJoinOp::type::LEFT_ANTI_JOIN &&
!local_state._shared_state->build_blocks.empty()))) {
local_state._shared_state->probe_side_eos = true;
}
local_state._dependency->set_ready_to_read();
}
Expand Down
2 changes: 1 addition & 1 deletion be/src/pipeline/exec/nested_loop_join_build_operator.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class NestedLoopJoinBuildSinkOperatorX final

vectorized::VExprContextSPtrs _filter_src_expr_ctxs;

const bool _is_output_left_side_only;
const bool _is_output_probe_side_only;
RowDescriptor _row_descriptor;
};

Expand Down
Loading