mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 19:42:00 +00:00
dbms: unconditionally move evaluation of storage ALIASes to InterpterSelectQuery [#METR-19317]
This commit is contained in:
parent
3a9e7a7170
commit
9d16702f84
@ -208,11 +208,6 @@ private:
|
||||
*/
|
||||
void collectJoinedColumns(NameSet & joined_columns, NamesAndTypesList & joined_columns_name_type);
|
||||
|
||||
/** Добавляет ALIAS столбцы из storage в aliases, если запрос не является SELECT с ARRAY JOIN. При наличии
|
||||
* ARRAY JOIN их добавлять нельзя, иначе ломается логика его выполнения.
|
||||
*/
|
||||
void addStorageAliases();
|
||||
|
||||
/** Создать словарь алиасов.
|
||||
*/
|
||||
void addASTAliases(ASTPtr & ast, int ignore_levels = 0);
|
||||
|
@ -120,9 +120,6 @@ void ExpressionAnalyzer::init()
|
||||
/// Создаёт словарь aliases: alias -> ASTPtr
|
||||
addASTAliases(ast);
|
||||
|
||||
/// Добавляет ALIAS столбцы из таблицы в aliases, если применимо.
|
||||
addStorageAliases();
|
||||
|
||||
/// Common subexpression elimination. Rewrite rules.
|
||||
normalizeTree();
|
||||
|
||||
@ -428,22 +425,6 @@ NamesAndTypesList::iterator ExpressionAnalyzer::findColumn(const String & name,
|
||||
}
|
||||
|
||||
|
||||
void ExpressionAnalyzer::addStorageAliases()
|
||||
{
|
||||
if (select_query && select_query->array_join_expression_list)
|
||||
return;
|
||||
|
||||
if (!storage)
|
||||
return;
|
||||
|
||||
/// @todo: consider storing default expressions with alias set to avoid cloning
|
||||
/// Добавляем ALIAS из таблицы, только если такого ALIAS еще не объявлено в запросе.
|
||||
for (const auto & alias : storage->alias_columns)
|
||||
if (!aliases.count(alias.name))
|
||||
aliases[alias.name] = setAlias(storage->column_defaults[alias.name].expression->clone(), alias.name);
|
||||
}
|
||||
|
||||
|
||||
/// ignore_levels - алиасы в скольки верхних уровнях поддерева нужно игнорировать.
|
||||
/// Например, при ignore_levels=1 ast не может быть занесен в словарь, но его дети могут.
|
||||
void ExpressionAnalyzer::addASTAliases(ASTPtr & ast, int ignore_levels)
|
||||
@ -686,7 +667,7 @@ void ExpressionAnalyzer::normalizeTreeImpl(
|
||||
|
||||
void ExpressionAnalyzer::addAliasColumns()
|
||||
{
|
||||
if (!(select_query && select_query->array_join_expression_list))
|
||||
if (!select_query)
|
||||
return;
|
||||
|
||||
if (!storage)
|
||||
|
@ -668,7 +668,13 @@ QueryProcessingStage::Enum InterpreterSelectQuery::executeFetchColumns()
|
||||
ASTPtr required_columns_expr_list{new ASTExpressionList};
|
||||
|
||||
for (const auto & column : required_columns)
|
||||
{
|
||||
const auto default_it = storage->column_defaults.find(column);
|
||||
if (default_it != std::end(storage->column_defaults) && default_it->second.type == ColumnDefaultType::Alias)
|
||||
required_columns_expr_list->children.emplace_back(setAlias(default_it->second.expression->clone(), column));
|
||||
else
|
||||
required_columns_expr_list->children.emplace_back(new ASTIdentifier{{}, column});
|
||||
}
|
||||
|
||||
alias_actions = ExpressionAnalyzer{required_columns_expr_list, context, storage, table_column_names}.getActions(true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user