From 3c4ac0ba08651ab51df8431d957619a495677df6 Mon Sep 17 00:00:00 2001 From: Bharat Nallan Chakravarthy Date: Sat, 30 Dec 2023 20:31:25 -0800 Subject: [PATCH 1/5] add system.database_engines table --- src/Databases/DatabaseFactory.h | 2 ++ .../System/StorageSystemDatabaseEngines.cpp | 25 +++++++++++++++++++ .../System/StorageSystemDatabaseEngines.h | 22 ++++++++++++++++ src/Storages/System/attachSystemTables.cpp | 2 ++ 4 files changed, 51 insertions(+) create mode 100644 src/Storages/System/StorageSystemDatabaseEngines.cpp create mode 100644 src/Storages/System/StorageSystemDatabaseEngines.h diff --git a/src/Databases/DatabaseFactory.h b/src/Databases/DatabaseFactory.h index 34df5f9373c..6ae5a669989 100644 --- a/src/Databases/DatabaseFactory.h +++ b/src/Databases/DatabaseFactory.h @@ -52,6 +52,8 @@ public: void registerDatabase(const std::string & name, CreatorFn creator_fn); + const DatabaseEngines & getDatabaseEngines() const { return database_engines; } + private: DatabaseEngines database_engines; }; diff --git a/src/Storages/System/StorageSystemDatabaseEngines.cpp b/src/Storages/System/StorageSystemDatabaseEngines.cpp new file mode 100644 index 00000000000..fb878a0eda0 --- /dev/null +++ b/src/Storages/System/StorageSystemDatabaseEngines.cpp @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +namespace DB +{ + +NamesAndTypesList StorageSystemDatabaseEngines::getNamesAndTypes() +{ + return { + {"name", std::make_shared()}, + }; +} + +void StorageSystemDatabaseEngines::fillData(MutableColumns & res_columns, ContextPtr, const SelectQueryInfo &) const +{ + for (const auto & [engine, _] : DatabaseFactory::instance().getDatabaseEngines()) + { + int i = 0; + res_columns[i++]->insert(engine); + } +} + +} diff --git a/src/Storages/System/StorageSystemDatabaseEngines.h b/src/Storages/System/StorageSystemDatabaseEngines.h new file mode 100644 index 00000000000..cd0ee541633 --- /dev/null +++ b/src/Storages/System/StorageSystemDatabaseEngines.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +namespace DB +{ + +class StorageSystemDatabaseEngines final : public IStorageSystemOneBlock +{ +protected: + void fillData(MutableColumns & res_columns, ContextPtr context, const SelectQueryInfo & query_info) const override; + + using IStorageSystemOneBlock::IStorageSystemOneBlock; + +public: + std::string getName() const override { return "SystemDatabaseEngines"; } + + static NamesAndTypesList getNamesAndTypes(); +}; + +} diff --git a/src/Storages/System/attachSystemTables.cpp b/src/Storages/System/attachSystemTables.cpp index ffe74f1c94a..d5008d9ed71 100644 --- a/src/Storages/System/attachSystemTables.cpp +++ b/src/Storages/System/attachSystemTables.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -131,6 +132,7 @@ void attachSystemTablesLocal(ContextPtr context, IDatabase & system_database) attach(context, system_database, "aggregate_function_combinators"); attach(context, system_database, "data_type_families"); attach(context, system_database, "collations"); + attach(context, system_database, "database_engines"); attach(context, system_database, "table_engines"); attach(context, system_database, "contributors"); attach(context, system_database, "users"); From 3e8439a78bc5cd8eb904f1bf3867f944c22348ae Mon Sep 17 00:00:00 2001 From: Bharat Nallan Chakravarthy Date: Sat, 30 Dec 2023 20:38:35 -0800 Subject: [PATCH 2/5] add to context access and suggest --- src/Access/ContextAccess.cpp | 1 + src/Client/Suggest.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Access/ContextAccess.cpp b/src/Access/ContextAccess.cpp index 90fddd0085d..567b131c00e 100644 --- a/src/Access/ContextAccess.cpp +++ b/src/Access/ContextAccess.cpp @@ -155,6 +155,7 @@ namespace "formats", "privileges", "data_type_families", + "database_engines", "table_engines", "table_functions", "aggregate_function_combinators", diff --git a/src/Client/Suggest.cpp b/src/Client/Suggest.cpp index eb98c3a5740..836c03d81ff 100644 --- a/src/Client/Suggest.cpp +++ b/src/Client/Suggest.cpp @@ -77,6 +77,7 @@ static String getLoadSuggestionQuery(Int32 suggestion_limit, bool basic_suggesti }; add_column("name", "functions", false, {}); + add_column("name", "database_engines", false, {}); add_column("name", "table_engines", false, {}); add_column("name", "formats", false, {}); add_column("name", "table_functions", false, {}); From 2996c8167ff4716c24f0902ae050106cf25768e8 Mon Sep 17 00:00:00 2001 From: Bharat Nallan Chakravarthy Date: Sat, 30 Dec 2023 20:48:35 -0800 Subject: [PATCH 3/5] add docs --- .../system-tables/database_engines.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/en/operations/system-tables/database_engines.md diff --git a/docs/en/operations/system-tables/database_engines.md b/docs/en/operations/system-tables/database_engines.md new file mode 100644 index 00000000000..09f0687af65 --- /dev/null +++ b/docs/en/operations/system-tables/database_engines.md @@ -0,0 +1,26 @@ +--- +slug: /en/operations/system-tables/database_engines +--- +# database_engines + +Contains the list of database engines supported by the server. + +This table contains the following columns (the column type is shown in brackets): + +- `name` (String) — The name of database engine. + +Example: + +``` sql +SELECT * +FROM system.database_engines +WHERE name in ('Atomic', 'Lazy', 'Ordinary') +``` + +``` text +┌─name─────┐ +│ Ordinary │ +│ Atomic │ +│ Lazy │ +└──────────┘ +``` From 8ba29756990d5cafb1379d87c3923d03dcd8b2fb Mon Sep 17 00:00:00 2001 From: Bharat Nallan Chakravarthy Date: Sat, 30 Dec 2023 20:52:33 -0800 Subject: [PATCH 4/5] add a simple test --- .../0_stateless/02954_system_database_engines.reference | 3 +++ tests/queries/0_stateless/02954_system_database_engines.sql | 1 + 2 files changed, 4 insertions(+) create mode 100644 tests/queries/0_stateless/02954_system_database_engines.reference create mode 100644 tests/queries/0_stateless/02954_system_database_engines.sql diff --git a/tests/queries/0_stateless/02954_system_database_engines.reference b/tests/queries/0_stateless/02954_system_database_engines.reference new file mode 100644 index 00000000000..f2bfcfd1699 --- /dev/null +++ b/tests/queries/0_stateless/02954_system_database_engines.reference @@ -0,0 +1,3 @@ +Ordinary +Atomic +Lazy diff --git a/tests/queries/0_stateless/02954_system_database_engines.sql b/tests/queries/0_stateless/02954_system_database_engines.sql new file mode 100644 index 00000000000..ae4035c6da6 --- /dev/null +++ b/tests/queries/0_stateless/02954_system_database_engines.sql @@ -0,0 +1 @@ +SELECT * FROM system.database_engines WHERE name IN ('Atomic', 'Lazy', 'Ordinary'); From 47028a88ee6a91c3f75d9eebdebdb14959e5facd Mon Sep 17 00:00:00 2001 From: Bharat Nallan Chakravarthy Date: Sun, 31 Dec 2023 00:10:05 -0800 Subject: [PATCH 5/5] fix test --- ...ngines.reference => 02959_system_database_engines.reference} | 2 +- ...m_database_engines.sql => 02959_system_database_engines.sql} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename tests/queries/0_stateless/{02954_system_database_engines.reference => 02959_system_database_engines.reference} (100%) rename tests/queries/0_stateless/{02954_system_database_engines.sql => 02959_system_database_engines.sql} (65%) diff --git a/tests/queries/0_stateless/02954_system_database_engines.reference b/tests/queries/0_stateless/02959_system_database_engines.reference similarity index 100% rename from tests/queries/0_stateless/02954_system_database_engines.reference rename to tests/queries/0_stateless/02959_system_database_engines.reference index f2bfcfd1699..c3cc6fe7c9d 100644 --- a/tests/queries/0_stateless/02954_system_database_engines.reference +++ b/tests/queries/0_stateless/02959_system_database_engines.reference @@ -1,3 +1,3 @@ -Ordinary Atomic Lazy +Ordinary diff --git a/tests/queries/0_stateless/02954_system_database_engines.sql b/tests/queries/0_stateless/02959_system_database_engines.sql similarity index 65% rename from tests/queries/0_stateless/02954_system_database_engines.sql rename to tests/queries/0_stateless/02959_system_database_engines.sql index ae4035c6da6..67cb20f0400 100644 --- a/tests/queries/0_stateless/02954_system_database_engines.sql +++ b/tests/queries/0_stateless/02959_system_database_engines.sql @@ -1 +1 @@ -SELECT * FROM system.database_engines WHERE name IN ('Atomic', 'Lazy', 'Ordinary'); +SELECT * FROM system.database_engines WHERE name IN ('Atomic', 'Lazy', 'Ordinary') ORDER BY name;