mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
Merge a6c1a16acb
into 72f6af4fa1
This commit is contained in:
commit
0ccae3dab1
@ -3197,11 +3197,18 @@ FindAliasForInputName::FindAliasForInputName(const ActionsDAG & actions_)
|
||||
{
|
||||
/// find input node which corresponds to alias
|
||||
const auto * node = output_node;
|
||||
while (node && node->type == ActionsDAG::ActionType::ALIAS)
|
||||
while (node)
|
||||
{
|
||||
/// alias has only one child
|
||||
chassert(node->children.size() == 1);
|
||||
node = node->children.front();
|
||||
/// There also can be 'materialize' functions in case of VIEWs
|
||||
if (node->type == ActionsDAG::ActionType::ALIAS
|
||||
|| (node->type == ActionsDAG::ActionType::FUNCTION && node->function_base->getName() == "materialize"))
|
||||
{
|
||||
/// alias has only one child
|
||||
chassert(node->children.size() == 1);
|
||||
node = node->children.front();
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (node && node->type == ActionsDAG::ActionType::INPUT)
|
||||
/// node can have several aliases but we consider only the first one
|
||||
|
@ -81,7 +81,7 @@ namespace ErrorCodes
|
||||
String dumpQueryPlan(QueryPlan & query_plan)
|
||||
{
|
||||
WriteBufferFromOwnString query_plan_buffer;
|
||||
query_plan.explainPlan(query_plan_buffer, QueryPlan::ExplainPlanOptions{true, true, true, true});
|
||||
query_plan.explainPlan(query_plan_buffer, QueryPlan::ExplainPlanOptions{true, true, true, true, true});
|
||||
|
||||
return query_plan_buffer.str();
|
||||
}
|
||||
|
@ -32,6 +32,18 @@ ExpressionStep::ExpressionStep(const DataStream & input_stream_, ActionsDAG acti
|
||||
getTraits(actions_dag_, input_stream_.header, input_stream_.sort_description))
|
||||
, actions_dag(std::move(actions_dag_))
|
||||
{
|
||||
if (!getDataStreamTraits().preserves_sorting)
|
||||
return;
|
||||
|
||||
FindAliasForInputName alias_finder(actions_dag);
|
||||
const auto & input_sort_description = getInputStreams().front().sort_description;
|
||||
for (size_t i = 0, s = input_sort_description.size(); i < s; ++i)
|
||||
{
|
||||
const auto & original_column = input_sort_description[i].column_name;
|
||||
const auto * alias_node = alias_finder.find(original_column);
|
||||
if (alias_node)
|
||||
output_stream->sort_description[i].column_name = alias_node->result_name;
|
||||
}
|
||||
}
|
||||
|
||||
void ExpressionStep::transformPipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings & settings)
|
||||
|
Loading…
Reference in New Issue
Block a user