Skip to content

Commit 61f2ab3

Browse files
committed
Update HashJoin::getNonJoinedBlocks
1 parent 6a1b005 commit 61f2ab3

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/Interpreters/HashJoin.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,23 +2202,23 @@ IBlocksStreamPtr HashJoin::getNonJoinedBlocks(const Block & left_sample_block,
22022202
{
22032203
if (!JoinCommon::hasNonJoinedBlocks(*table_join))
22042204
return {};
2205+
size_t left_columns_count = left_sample_block.columns();
22052206

22062207
bool multiple_disjuncts = !table_join->oneDisjunct();
2207-
2208-
if (multiple_disjuncts)
2209-
{
2210-
/// ... calculate `left_columns_count` ...
2211-
size_t left_columns_count = left_sample_block.columns();
2212-
auto non_joined = std::make_unique<NotJoinedHash>(*this, max_block_size, multiple_disjuncts);
2213-
return std::make_unique<NotJoinedBlocks>(std::move(non_joined), result_sample_block, left_columns_count, *table_join);
2214-
}
2215-
else
2208+
if (!multiple_disjuncts)
22162209
{
2217-
size_t left_columns_count = left_sample_block.columns();
2218-
chassert(left_columns_count + required_right_keys.columns() + sample_block_with_columns_to_add.columns() == result_sample_block.columns());
2219-
auto non_joined = std::make_unique<NotJoinedHash>(*this, max_block_size, multiple_disjuncts);
2220-
return std::make_unique<NotJoinedBlocks>(std::move(non_joined), result_sample_block, left_columns_count, *table_join);
2210+
/// With multiple disjuncts, all keys are in sample_block_with_columns_to_add, so invariant is not held
2211+
size_t expected_columns_count = left_columns_count + required_right_keys.columns() + sample_block_with_columns_to_add.columns();
2212+
if (expected_columns_count != result_sample_block.columns())
2213+
{
2214+
throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected number of columns in result sample block: {} instead of {} ({} + {} + {})",
2215+
result_sample_block.columns(), expected_columns_count,
2216+
left_columns_count, required_right_keys.columns(), sample_block_with_columns_to_add.columns());
2217+
}
22212218
}
2219+
2220+
auto non_joined = std::make_unique<NotJoinedHash>(*this, max_block_size, multiple_disjuncts);
2221+
return std::make_unique<NotJoinedBlocks>(std::move(non_joined), result_sample_block, left_columns_count, *table_join);
22222222
}
22232223

22242224
void HashJoin::reuseJoinedData(const HashJoin & join)

0 commit comments

Comments
 (0)