提交 61ae4e55 编写于 作者: A Alexey Milovidov

Using std::shared_ptr for data types [#METR-21503].

上级 bf71e2ed
......@@ -162,7 +162,7 @@ DataTypePtr DataTypeFactory::get(const String & name) const
ParserNameTypePairList columns_p;
ASTPtr columns_ast = parseQuery(columns_p, parameters.data(), parameters.data() + parameters.size(), "parameters for data type " + name);
NamesAndTypesListPtr columns = new NamesAndTypesList;
NamesAndTypesListPtr columns = std::make_shared<NamesAndTypesList>();
ASTExpressionList & columns_list = typeid_cast<ASTExpressionList &>(*columns_ast);
for (ASTs::iterator it = columns_list.children.begin(); it != columns_list.children.end(); ++it)
......
......@@ -71,7 +71,7 @@ std::string DataTypeNested::getName() const
NamesAndTypesListPtr DataTypeNested::expandNestedColumns(const NamesAndTypesList & names_and_types)
{
NamesAndTypesListPtr columns = new NamesAndTypesList;
NamesAndTypesListPtr columns = std::make_shared<NamesAndTypesList>();
for (NamesAndTypesList::const_iterator it = names_and_types.begin(); it != names_and_types.end(); ++it)
{
if (const DataTypeNested * type_nested = typeid_cast<const DataTypeNested *>(&*it->type))
......
......@@ -391,7 +391,7 @@ void ExpressionAnalyzer::addExternalStorage(ASTPtr & subquery_or_table_name)
SharedPtr<InterpreterSelectQuery> interpreter = interpretSubquery(subquery_or_table_name, context, subquery_depth, {});
Block sample = interpreter->getSampleBlock();
NamesAndTypesListPtr columns = new NamesAndTypesList(sample.getColumnsList());
NamesAndTypesListPtr columns = std::make_shared<NamesAndTypesList>(sample.getColumnsList());
StoragePtr external_storage = StorageMemory::create(external_table_name, columns);
......
......@@ -348,7 +348,7 @@ InterpreterCreateQuery::ColumnsInfo InterpreterCreateQuery::getColumnsInfo(
auto && columns_and_defaults = parseColumns(columns, context);
res.materialized_columns = removeAndReturnColumns(columns_and_defaults, ColumnDefaultType::Materialized);
res.alias_columns = removeAndReturnColumns(columns_and_defaults, ColumnDefaultType::Alias);
res.columns = new NamesAndTypesList{std::move(columns_and_defaults.first)};
res.columns = std::make_shared<NamesAndTypesList>(std::move(columns_and_defaults.first));
res.column_defaults = std::move(columns_and_defaults.second);
if (res.columns->size() + res.materialized_columns.size() == 0)
......@@ -369,14 +369,14 @@ InterpreterCreateQuery::ColumnsInfo InterpreterCreateQuery::setColumns(
}
else if (!create.as_table.empty())
{
res.columns = new NamesAndTypesList(as_storage->getColumnsListNonMaterialized());
res.columns = std::make_shared<NamesAndTypesList>(as_storage->getColumnsListNonMaterialized());
res.materialized_columns = as_storage->materialized_columns;
res.alias_columns = as_storage->alias_columns;
res.column_defaults = as_storage->column_defaults;
}
else if (create.select)
{
res.columns = new NamesAndTypesList;
res.columns = std::make_shared<NamesAndTypesList>();
for (size_t i = 0; i < as_select_sample.columns(); ++i)
res.columns->push_back(NameAndTypePair(as_select_sample.getByPosition(i).name, as_select_sample.getByPosition(i).type));
}
......
......@@ -76,7 +76,7 @@ BlockIO InterpreterInsertQuery::execute()
auto table_lock = table->lockStructure(true);
NamesAndTypesListPtr required_columns = new NamesAndTypesList(table->getColumnsList());
NamesAndTypesListPtr required_columns = std::make_shared<NamesAndTypesList>(table->getColumnsList());
/// Создаем кортеж из нескольких стримов, в которые будем писать данные.
BlockOutputStreamPtr out{
......
......@@ -588,7 +588,7 @@ bool TCPHandler::receiveData()
/// Если такой таблицы не существовало, создаем ее.
if (!(storage = query_context.tryGetExternalTable(external_table_name)))
{
NamesAndTypesListPtr columns = new NamesAndTypesList(block.getColumnsList());
NamesAndTypesListPtr columns = std::make_shared<NamesAndTypesList>(block.getColumnsList());
storage = StorageMemory::create(external_table_name, columns);
query_context.addExternalTable(external_table_name, storage);
}
......
......@@ -29,7 +29,7 @@ int main(int argc, char ** argv)
/// создаём таблицу с парой столбцов
NamesAndTypesListPtr names_and_types = new NamesAndTypesList;
NamesAndTypesListPtr names_and_types = std::make_shared<NamesAndTypesList>();
names_and_types->push_back(NameAndTypePair("d", std::make_shared<DataTypeDate>()));
names_and_types->push_back(NameAndTypePair("a", std::make_shared<DataTypeArray>(std::make_shared<DataTypeUInt32>())));
......
......@@ -76,7 +76,7 @@ StoragePtr TableFunctionMerge::execute(ASTPtr ast_function, Context & context) c
return StorageMerge::create(
getName(),
new NamesAndTypesList(chooseColumns(source_database, table_name_regexp, context)),
std::make_shared<NamesAndTypesList>(chooseColumns(source_database, table_name_regexp, context)),
source_database,
table_name_regexp,
context);
......
......@@ -267,7 +267,7 @@ StoragePtr TableFunctionRemote::execute(ASTPtr ast_function, Context & context)
return StorageDistributed::create(
getName(),
new NamesAndTypesList(getStructureOfRemoteTable(*cluster, remote_database, remote_table, context)),
std::make_shared<NamesAndTypesList>(getStructureOfRemoteTable(*cluster, remote_database, remote_table, context)),
remote_database,
remote_table,
cluster,
......
......@@ -67,7 +67,7 @@ StoragePtr TableFunctionShardByHash::execute(ASTPtr ast_function, Context & cont
return StorageDistributed::create(
getName(),
new NamesAndTypesList(getStructureOfRemoteTable(*shard, remote_database, remote_table, context)),
std::make_shared<NamesAndTypesList>(getStructureOfRemoteTable(*shard, remote_database, remote_table, context)),
remote_database,
remote_table,
shard,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册