mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
Merge pull request #2851 from zhang2014/feature/add_dependies_for_system_tables
ISSUES-2850 add dependencies for system tables
This commit is contained in:
commit
6114dfbad2
@ -12,6 +12,7 @@
|
||||
#include <Common/typeid_cast.h>
|
||||
#include <Common/StringUtils/StringUtils.h>
|
||||
#include <DataTypes/DataTypesNumber.h>
|
||||
#include <DataTypes/DataTypeArray.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -35,6 +36,8 @@ StorageSystemTables::StorageSystemTables(const std::string & name_)
|
||||
{"data_path", std::make_shared<DataTypeString>()},
|
||||
{"metadata_path", std::make_shared<DataTypeString>()},
|
||||
{"metadata_modification_time", std::make_shared<DataTypeDateTime>()},
|
||||
{"dependencies_database", std::make_shared<DataTypeArray>(std::make_shared<DataTypeString>())},
|
||||
{"dependencies_table", std::make_shared<DataTypeArray>(std::make_shared<DataTypeString>())},
|
||||
{"create_table_query", std::make_shared<DataTypeString>()},
|
||||
{"engine_full", std::make_shared<DataTypeString>()}
|
||||
}));
|
||||
@ -126,6 +129,29 @@ BlockInputStreams StorageSystemTables::read(
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insert(static_cast<UInt64>(database->getTableMetadataModificationTime(context, table_name)));
|
||||
|
||||
{
|
||||
Array dependencies_table_name_array;
|
||||
Array dependencies_database_name_array;
|
||||
if (columns_mask[src_index] || columns_mask[src_index + 1])
|
||||
{
|
||||
const auto dependencies = context.getDependencies(database_name, table_name);
|
||||
|
||||
dependencies_table_name_array.reserve(dependencies.size());
|
||||
dependencies_database_name_array.reserve(dependencies.size());
|
||||
for (const auto & dependency : dependencies)
|
||||
{
|
||||
dependencies_table_name_array.push_back(dependency.second);
|
||||
dependencies_database_name_array.push_back(dependency.first);
|
||||
}
|
||||
}
|
||||
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insert(dependencies_database_name_array);
|
||||
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insert(dependencies_table_name_array);
|
||||
}
|
||||
|
||||
if (columns_mask[src_index] || columns_mask[src_index + 1])
|
||||
{
|
||||
ASTPtr ast = database->tryGetCreateTableQuery(context, table_name);
|
||||
@ -191,6 +217,12 @@ BlockInputStreams StorageSystemTables::read(
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insertDefault();
|
||||
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insertDefault();
|
||||
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insertDefault();
|
||||
|
||||
if (columns_mask[src_index++])
|
||||
res_columns[res_index++]->insert(table.second->getName());
|
||||
}
|
||||
|
@ -3,4 +3,5 @@ B
|
||||
A 1 TinyLog CREATE TABLE test_show_tables.A ( A UInt8) ENGINE = TinyLog
|
||||
B 1 TinyLog CREATE TABLE test_show_tables.B ( A UInt8) ENGINE = TinyLog
|
||||
test_temporary_table
|
||||
['test_show_tables'] ['test_materialized']
|
||||
0
|
||||
|
@ -12,6 +12,10 @@ SELECT name, toUInt32(metadata_modification_time) > 0, engine_full, create_table
|
||||
CREATE TEMPORARY TABLE test_temporary_table (id UInt64);
|
||||
SELECT name FROM system.tables WHERE is_temporary = 1 AND name = 'test_temporary_table';
|
||||
|
||||
CREATE TABLE test_show_tables.test_log(id UInt64) ENGINE = Log;
|
||||
CREATE MATERIALIZED VIEW test_show_tables.test_materialized ENGINE = Log AS SELECT * FROM test_show_tables.test_log;
|
||||
SELECT dependencies_database, dependencies_table FROM system.tables WHERE name = 'test_log';
|
||||
|
||||
DROP DATABASE test_show_tables;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user