diff --git a/src/Parsers/ParserCreateExternalTableQuery.cpp b/src/Parsers/ParserCreateExternalTableQuery.cpp index 8c0cddd9c3b..12f5e64ebef 100644 --- a/src/Parsers/ParserCreateExternalTableQuery.cpp +++ b/src/Parsers/ParserCreateExternalTableQuery.cpp @@ -8,6 +8,20 @@ namespace DB { +namespace +{ +ASTPtr parseComment(IParser::Pos & pos, Expected & expected) +{ + ParserKeyword s_comment("COMMENT"); + ParserStringLiteral string_literal_parser; + ASTPtr comment; + + s_comment.ignore(pos, expected) && string_literal_parser.parse(pos, comment, expected); + + return comment; +} +} + bool DB::ParserCreateExternalTableQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected, [[ maybe_unused ]] bool hint) { ParserKeyword s_create("CREATE"); @@ -52,6 +66,8 @@ bool DB::ParserCreateExternalTableQuery::parseImpl(Pos & pos, ASTPtr & node, Exp return false; } + auto comment = parseComment(pos, expected); + auto create_query = std::make_shared(); node = create_query; @@ -72,6 +88,9 @@ bool DB::ParserCreateExternalTableQuery::parseImpl(Pos & pos, ASTPtr & node, Exp if (create_query->table) create_query->children.push_back(create_query->table); + if (comment) + create_query->set(create_query->comment, comment); + auto storage = std::make_shared(); storage->set(storage->engine, makeASTFunction("ExternalTable")); storage->set(storage->settings, settings); diff --git a/src/Storages/ExternalTable/StorageExternalTable.cpp b/src/Storages/ExternalTable/StorageExternalTable.cpp index 5776bc96be0..b57ee9b6fb9 100644 --- a/src/Storages/ExternalTable/StorageExternalTable.cpp +++ b/src/Storages/ExternalTable/StorageExternalTable.cpp @@ -11,11 +11,19 @@ namespace DB StorageExternalTable::StorageExternalTable( const StorageID & table_id, std::unique_ptr settings, + const String & comment, bool is_attach, ContextPtr context_) : IStorage(table_id) , WithContext(context_) { + if (!comment.empty()) + { + StorageInMemoryMetadata storage_metadata; + storage_metadata.setComment(comment); + setInMemoryMetadata(storage_metadata); + } + external_table = ExternalTableFactory::instance().getExternalTable(table_id.getTableName(), std::move(settings)); /// Two situations: @@ -95,6 +103,7 @@ void registerStorageExternalTable(StorageFactory & factory) return StorageExternalTable::create( args.table_id, std::move(settings), + args.comment, args.attach, args.getContext()->getGlobalContext()); }; diff --git a/src/Storages/ExternalTable/StorageExternalTable.h b/src/Storages/ExternalTable/StorageExternalTable.h index c5d86689484..85cf0bf69fe 100644 --- a/src/Storages/ExternalTable/StorageExternalTable.h +++ b/src/Storages/ExternalTable/StorageExternalTable.h @@ -43,6 +43,7 @@ class StorageExternalTable final : public shared_ptr_helper settings, + const String & comment, bool is_attach, ContextPtr context_);