@@ -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
22242224void HashJoin::reuseJoinedData (const HashJoin & join)
0 commit comments