提交 9eb249af 编写于 作者: A Alexey Milovidov

Using std::shared_ptr for functions and AST [#METR-21503].

上级 36efb706
......@@ -37,7 +37,7 @@ protected:
return false;
node = std::make_shared<ASTEnumElement>(
{ begin, pos },
StringRange{ begin, pos },
static_cast<const ASTLiteral &>(*name).value.get<String>(),
static_cast<const ASTLiteral &>(*value).value);
......
......@@ -183,7 +183,7 @@ void TotalsHavingBlockInputStream::addToTotals(Block & totals, Block & block, co
if (init)
{
function = column->getAggregateFunction();
function = column->getAggregateFunction().get();
auto target = std::make_shared<ColumnAggregateFunction>(column->getAggregateFunction(), Arenas(1, arena));
totals.insert(ColumnWithTypeAndName(target, current.type, current.name));
......@@ -197,7 +197,7 @@ void TotalsHavingBlockInputStream::addToTotals(Block & totals, Block & block, co
if (!target)
throw Exception("Unexpected type of column: " + totals.getByPosition(i).column->getName(),
ErrorCodes::ILLEGAL_COLUMN);
function = target->getAggregateFunction();
function = target->getAggregateFunction().get();
data = target->getData()[0];
}
......
......@@ -553,7 +553,7 @@ void ExpressionAnalyzer::normalizeTreeImpl(
}
ASTPtr initial_ast = ast;
current_asts.insert(initial_ast);
current_asts.insert(initial_ast.get());
String my_alias = ast->tryGetAlias();
if (!my_alias.empty())
......@@ -573,7 +573,7 @@ void ExpressionAnalyzer::normalizeTreeImpl(
if (columns.end() != it)
{
ast = std::make_shared<ASTIdentifier>(func_node->range, function_string);
current_asts.insert(ast);
current_asts.insert(ast.get());
replaced = true;
}
......@@ -598,7 +598,7 @@ void ExpressionAnalyzer::normalizeTreeImpl(
if (jt != aliases.end() && current_alias != node->name)
{
/// Заменим его на соответствующий узел дерева.
if (current_asts.count(jt->second))
if (current_asts.count(jt->second.get()))
throw Exception("Cyclic aliases", ErrorCodes::CYCLIC_ALIASES);
if (!my_alias.empty() && my_alias != jt->second->getAliasOrColumnName())
{
......@@ -643,9 +643,9 @@ void ExpressionAnalyzer::normalizeTreeImpl(
if (replaced)
{
normalizeTreeImpl(ast, finished_asts, current_asts, current_alias);
current_asts.erase(initial_ast);
current_asts.erase(ast);
finished_asts[initial_ast] = ast;
current_asts.erase(initial_ast.get());
current_asts.erase(ast.get());
finished_asts[initial_ast] = ast.get();
return;
}
......@@ -717,8 +717,8 @@ void ExpressionAnalyzer::normalizeTreeImpl(
", and '" + node->name + "' is not an aggregate function.", ErrorCodes::FUNCTION_CANNOT_HAVE_PARAMETERS);
}
current_asts.erase(initial_ast);
current_asts.erase(ast);
current_asts.erase(initial_ast.get());
current_asts.erase(ast.get());
finished_asts[initial_ast] = ast;
}
......@@ -827,7 +827,7 @@ void ExpressionAnalyzer::executeScalarSubqueriesImpl(ASTPtr & ast)
{
auto lit = std::make_shared<ASTLiteral>(ast->range, (*block.getByPosition(0).column)[0]);
lit->alias = subquery->alias;
ast = addTypeConversion(lit, block.getByPosition(0).type->getName());
ast = addTypeConversion(lit.get(), block.getByPosition(0).type->getName());
}
else
{
......@@ -844,7 +844,7 @@ void ExpressionAnalyzer::executeScalarSubqueriesImpl(ASTPtr & ast)
for (size_t i = 0; i < columns; ++i)
{
exp_list->children[i] = addTypeConversion(
std::make_shared<ASTLiteral>(ast->range, (*block.getByPosition(i).column)[0]),
std::make_unique<ASTLiteral>(ast->range, (*block.getByPosition(i).column)[0]).get(),
block.getByPosition(i).type->getName());
}
}
......
......@@ -196,7 +196,7 @@ static ColumnsAndDefaults parseColumns(
default_expr_list->children.emplace_back(setAlias(
makeASTFunction("CAST", std::make_shared<ASTIdentifier>(StringRange(), tmp_column_name),
std::make_shared<ASTLiteral>(StringRange(), data_type_ptr->getName()), final_column_name));
std::make_shared<ASTLiteral>(StringRange(), Field(data_type_ptr->getName())), final_column_name)));
default_expr_list->children.emplace_back(setAlias(col_decl.default_expression->clone(), tmp_column_name));
}
else
......@@ -282,8 +282,6 @@ ASTPtr InterpreterCreateQuery::formatColumns(const NamesAndTypesList & columns)
for (const auto & column : columns)
{
const auto column_declaration = std::make_shared<ASTColumnDeclaration>();
ASTPtr column_declaration_ptr{column_declaration};
column_declaration->name = column.name;
StringPtr type_name = std::make_shared<String>(column.type->getName());
......@@ -293,7 +291,7 @@ ASTPtr InterpreterCreateQuery::formatColumns(const NamesAndTypesList & columns)
ParserIdentifierWithOptionalParameters storage_p;
column_declaration->type = parseQuery(storage_p, pos, end, "data type");
column_declaration->type->query_string = type_name;
columns_list->children.push_back(column_declaration_ptr);
columns_list->children.emplace_back(column_declaration);
}
return columns_list;
......
......@@ -352,7 +352,9 @@ void LogicalExpressionsOptimizer::fixBrokenOrExpressions()
for (auto & parent : parents)
{
parent->children.push_back(operands[0]);
auto first_erased = std::remove(parent->children.begin(), parent->children.end(), or_function);
auto first_erased = std::remove_if(parent->children.begin(), parent->children.end(),
[or_function](const ASTPtr & ptr) { return ptr.get() == or_function; });
parent->children.erase(first_erased, parent->children.end());
}
......
......@@ -93,7 +93,7 @@ bool ParserTypeInCastExpression::parseImpl(Pos & pos, Pos end, ASTPtr & node, Po
if (ParserIdentifierWithOptionalParameters::parseImpl(pos, end, node, max_parsed_pos, expected))
{
const auto & id_with_params = typeid_cast<const ASTFunction &>(*node);
node = std::make_shared<ASTIdentifier>(id_with_params.range, { id_with_params.range.first, id_with_params.range.second });
node = std::make_shared<ASTIdentifier>(id_with_params.range, String{ id_with_params.range.first, id_with_params.range.second });
return true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册