MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / joinPlansWithStep

Function joinPlansWithStep

src/Planner/PlannerJoinTree.cpp:1654–1692  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1652
1653
1654JoinTreeQueryPlan joinPlansWithStep(
1655 QueryPlanStepPtr join_step,
1656 JoinTreeQueryPlan left_join_tree_query_plan,
1657 JoinTreeQueryPlan right_join_tree_query_plan)
1658{
1659 std::vector<QueryPlanPtr> plans;
1660 plans.emplace_back(std::make_unique<QueryPlan>(std::move(left_join_tree_query_plan.query_plan)));
1661 plans.emplace_back(std::make_unique<QueryPlan>(std::move(right_join_tree_query_plan.query_plan)));
1662
1663 QueryPlan result_plan;
1664 result_plan.unitePlans(std::move(join_step), {std::move(plans)});
1665
1666 /// Collect all required row_policies and actions sets from left and right join tree query plans
1667
1668 auto result_used_row_policies = std::move(left_join_tree_query_plan.used_row_policies);
1669 for (const auto & right_join_tree_query_plan_row_policy : right_join_tree_query_plan.used_row_policies)
1670 result_used_row_policies.insert(right_join_tree_query_plan_row_policy);
1671
1672 auto result_useful_sets = std::move(left_join_tree_query_plan.useful_sets);
1673 for (const auto & useful_set : right_join_tree_query_plan.useful_sets)
1674 result_useful_sets.insert(useful_set);
1675
1676 auto result_mapping = std::move(left_join_tree_query_plan.query_node_to_plan_step_mapping);
1677 const auto & r_mapping = right_join_tree_query_plan.query_node_to_plan_step_mapping;
1678 result_mapping.insert(r_mapping.begin(), r_mapping.end());
1679
1680 auto result_source_constants = std::move(left_join_tree_query_plan.source_constants);
1681 for (const auto & source_constant : right_join_tree_query_plan.source_constants)
1682 result_source_constants.insert(source_constant);
1683
1684 return JoinTreeQueryPlan{
1685 .query_plan = std::move(result_plan),
1686 .stage = QueryProcessingStage::FetchColumns,
1687 .used_row_policies = std::move(result_used_row_policies),
1688 .useful_sets = std::move(result_useful_sets),
1689 .query_node_to_plan_step_mapping = std::move(result_mapping),
1690 .source_constants = std::move(result_source_constants),
1691 };
1692}
1693
1694JoinTreeQueryPlan buildQueryPlanForCrossJoinNode(
1695 const QueryTreeNodePtr & join_table_expression,

Callers 2

Calls 5

unitePlansMethod · 0.80
emplace_backMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected