MCPcopy Create free account
hub / github.com/ByConity/ByConity / joinBlock

Method joinBlock

src/Interpreters/MergeJoin.cpp:644–702  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

642}
643
644void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
645{
646 Names lowcard_keys = lowcard_right_keys;
647 if (block)
648 {
649 JoinCommon::checkTypesOfKeys(block, table_join->keyNamesLeft(), right_table_keys, table_join->keyNamesRight());
650 materializeBlockInplace(block);
651
652 for (const auto & column_name : table_join->keyNamesLeft())
653 {
654 if (block.getByName(column_name).type->lowCardinality())
655 lowcard_keys.push_back(column_name);
656 }
657
658 JoinCommon::removeLowCardinalityInplace(block, table_join->keyNamesLeft(), false);
659
660 sortBlock(block, left_sort_description);
661
662 if (nullable_left_side)
663 JoinCommon::convertColumnsToNullable(block);
664 }
665
666 if (!not_processed && left_blocks_buffer)
667 {
668 if (!block || block.rows())
669 block = left_blocks_buffer->exchange(std::move(block));
670 if (!block)
671 return;
672 }
673
674 if (is_in_memory)
675 {
676 if (is_all_join)
677 joinSortedBlock<true, true>(block, not_processed);
678 else
679 joinSortedBlock<true, false>(block, not_processed);
680 }
681 else
682 {
683 if (is_all_join)
684 joinSortedBlock<false, true>(block, not_processed);
685 else
686 joinSortedBlock<false, false>(block, not_processed);
687 }
688
689 /// Back thread even with no data. We have some unfinished data in buffer.
690 if (!not_processed && left_blocks_buffer)
691 not_processed = std::make_shared<NotProcessed>(NotProcessed{{}, 0, 0, 0});
692
693 for (const auto & column_name : lowcard_keys)
694 {
695 if (!block.has(column_name))
696 continue;
697 if (auto & col = block.getByName(column_name); !col.type->lowCardinality())
698 JoinCommon::changeLowCardinalityInplace(col);
699 }
700
701 JoinCommon::restoreLowCardinalityInplace(block);

Callers

nothing calls this directly

Calls 13

checkTypesOfKeysFunction · 0.85
materializeBlockInplaceFunction · 0.85
sortBlockFunction · 0.85
convertColumnsToNullableFunction · 0.85
getByNameMethod · 0.80
exchangeMethod · 0.80
lowCardinalityMethod · 0.45
push_backMethod · 0.45
rowsMethod · 0.45

Tested by

no test coverage detected