ASTPtr InterpreterCreateQuery::formatColumns(const ColumnsDescription & columns) { auto columns_list = std::make_shared<ASTExpressionList>(); for (const auto & column : columns.getAll()) { 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()); auto pos = type_name->data(); const auto end = pos + type_name->size(); ParserIdentifierWithOptionalParameters storage_p; column_declaration->type = parseQuery(storage_p, pos, end, "data type", 0); column_declaration->type->owned_string = type_name; const auto it = columns.defaults.find(column.name); if (it != std::end(columns.defaults)) { column_declaration->default_specifier = toString(it->second.kind); column_declaration->default_expression = it->second.expression->clone(); } columns_list->children.push_back(column_declaration_ptr); } return columns_list; }
ASTPtr InterpreterCreateQuery::formatColumns(const ColumnsDescription & columns) { auto columns_list = std::make_shared<ASTExpressionList>(); for (const auto & column : columns.getAll()) { const auto column_declaration = std::make_shared<ASTColumnDeclaration>(); ASTPtr column_declaration_ptr{column_declaration}; column_declaration->name = column.name; ParserIdentifierWithOptionalParameters storage_p; String type_name = column.type->getName(); auto type_name_pos = type_name.data(); const auto type_name_end = type_name_pos + type_name.size(); column_declaration->type = parseQuery(storage_p, type_name_pos, type_name_end, "data type", 0); const auto defaults_it = columns.defaults.find(column.name); if (defaults_it != std::end(columns.defaults)) { column_declaration->default_specifier = toString(defaults_it->second.kind); column_declaration->default_expression = defaults_it->second.expression->clone(); } const auto comments_it = columns.comments.find(column.name); if (comments_it != std::end(columns.comments)) { column_declaration->comment = std::make_shared<ASTLiteral>(Field(comments_it->second)); } const auto ct = columns.codecs.find(column.name); if (ct != std::end(columns.codecs)) { String codec_desc = ct->second->getCodecDesc(); codec_desc = "CODEC(" + codec_desc + ")"; auto codec_desc_pos = codec_desc.data(); const auto codec_desc_end = codec_desc_pos + codec_desc.size(); ParserIdentifierWithParameters codec_p; column_declaration->codec = parseQuery(codec_p, codec_desc_pos, codec_desc_end, "column codec", 0); } columns_list->children.push_back(column_declaration_ptr); } return columns_list; }