| 1196 | } |
| 1197 | |
| 1198 | ArrayJoinActionPtr |
| 1199 | SelectQueryExpressionAnalyzer::appendArrayJoin(ExpressionActionsChain & chain, ActionsDAGPtr & before_array_join, bool only_types) |
| 1200 | { |
| 1201 | const auto * select_query = getSelectQuery(); |
| 1202 | |
| 1203 | bool is_array_join_left; |
| 1204 | ASTPtr array_join_expression_list = select_query->arrayJoinExpressionList(is_array_join_left); |
| 1205 | if (!array_join_expression_list) |
| 1206 | return nullptr; |
| 1207 | |
| 1208 | ExpressionActionsChain::Step & step = chain.lastStep(columns_after_bitmap_index); |
| 1209 | |
| 1210 | getRootActions(array_join_expression_list, only_types, step.actions()); |
| 1211 | |
| 1212 | auto array_join = addMultipleArrayJoinAction(step.actions(), is_array_join_left); |
| 1213 | before_array_join = chain.getLastActions(); |
| 1214 | |
| 1215 | chain.steps.push_back(std::make_unique<ExpressionActionsChain::ArrayJoinStep>(array_join, step.getResultColumns())); |
| 1216 | |
| 1217 | chain.addStep(); |
| 1218 | |
| 1219 | return array_join; |
| 1220 | } |
| 1221 | |
| 1222 | bool SelectQueryExpressionAnalyzer::appendJoinLeftKeys(ExpressionActionsChain & chain, bool only_types) |
| 1223 | { |
no test coverage detected