This commit is contained in:
Dmitry Novik 2024-09-19 15:37:49 +00:00 committed by GitHub
commit 0ccae3dab1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 5 deletions

View File

@ -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

View File

@ -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();
}

View File

@ -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)