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

Method joinBlock

src/Interpreters/NestedLoopJoin.cpp:152–197  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150}
151
152void NestedLoopJoin::joinBlock(Block & left_block, ExtraBlockPtr &)
153{
154 auto left_rows = left_block.rows();
155 materializeBlockInplace(left_block);
156 JoinCommon::removeLowCardinalityInplace(left_block);
157
158 NamesAndTypesList total_columns = left_block.cloneEmpty().getNamesAndTypesList();
159 completeColumnsAfterJoin(total_columns);
160
161 if (table_join->hasOn() || table_join->hasUsing())
162 {
163 // generate actions for on expression
164 ASTPtr expression_list = nullptr;
165 if (table_join->hasOn())
166 expression_list = table_join->getOnExpression();
167 else
168 {
169 const auto & null_safe_columns = table_join->keyIdsNullSafe();
170 std::vector<std::shared_ptr<ASTFunction>> conds;
171
172 for (size_t i = 0; i < table_join->keyNamesLeft().size(); i++) {
173 const String fn = null_safe_columns && (*null_safe_columns)[i] ? "bitEquals" : "equals";
174
175 conds.emplace_back(makeASTFunction(fn,
176 std::make_shared<ASTIdentifier>(table_join->keyNamesLeft()[i]),
177 std::make_shared<ASTIdentifier>(table_join->keyNamesRight()[i])));
178 }
179 expression_list = conds[0];
180 for (size_t i = 1; i < conds.size(); i++)
181 expression_list = makeASTFunction("and", expression_list, conds[i]);
182 }
183 auto syntax_result
184 = TreeRewriter(context).analyze(expression_list, total_columns);
185
186 auto actions = ExpressionAnalyzer(expression_list, syntax_result, context).getActions(true, false);
187
188 String filter_name = expression_list->getColumnName();
189 if (left_rows == 0)
190 {
191 completeHeader(left_block);
192 return;
193 }
194
195 joinImpl(actions, filter_name, left_block);
196 }
197}
198
199void NestedLoopJoin::completeColumnsAfterJoin(NamesAndTypesList & total_columns)
200{

Callers

nothing calls this directly

Calls 15

materializeBlockInplaceFunction · 0.85
makeASTFunctionFunction · 0.85
TreeRewriterClass · 0.85
hasOnMethod · 0.80
getOnExpressionMethod · 0.80
keyIdsNullSafeMethod · 0.80
ExpressionAnalyzerClass · 0.70
rowsMethod · 0.45
getNamesAndTypesListMethod · 0.45
cloneEmptyMethod · 0.45
hasUsingMethod · 0.45

Tested by

no test coverage detected