diff --git a/programs/server/Server.cpp b/programs/server/Server.cpp index df5e37960d..a85f186e2f 100644 --- a/programs/server/Server.cpp +++ b/programs/server/Server.cpp @@ -136,7 +136,6 @@ #include #include #include -#include #include #include @@ -1792,9 +1791,6 @@ int Server::main(const std::vector & /*args*/) global_context->setEnableSSL(enable_ssl); - bool enable_tenant_systemdb = config().getBool("enable_tenant_systemdb", true); - setEnableTenantSystemDB(enable_tenant_systemdb); - buildLoggers(config(), logger()); main_config_reloader->start(); diff --git a/src/Interpreters/IdentifierSemantic.cpp b/src/Interpreters/IdentifierSemantic.cpp index 9a58750fbe..d8fef9bc3a 100644 --- a/src/Interpreters/IdentifierSemantic.cpp +++ b/src/Interpreters/IdentifierSemantic.cpp @@ -218,8 +218,14 @@ bool IdentifierSemantic::doesIdentifierBelongTo(const ASTIdentifier & identifier { size_t num_components = identifier.name_parts.size(); if (num_components >= 3) - return identifier.name_parts[0] == database && - identifier.name_parts[1] == table; + { + if (identifier.name_parts[1] == table) + { + if (identifier.name_parts[0] != database) + return formatTenantDatabaseName(identifier.name_parts[0]) == database; + return true; + } + } return false; } diff --git a/src/Parsers/formatTenantDatabaseName.cpp b/src/Parsers/formatTenantDatabaseName.cpp index 8bb09d969e..b3da96a44d 100644 --- a/src/Parsers/formatTenantDatabaseName.cpp +++ b/src/Parsers/formatTenantDatabaseName.cpp @@ -31,13 +31,6 @@ static String getTenantId() return CurrentThread::get().getTenantId(); } -static bool enable_tenant_systemdb = true; - -void setEnableTenantSystemDB(bool v) -{ - enable_tenant_systemdb = v; -} - String getCurrentCatalog() { String empty_result; @@ -64,11 +57,6 @@ static bool isInternalDatabaseName(const String & database_name) if (db == database_name) return true; } - if(!enable_tenant_systemdb) - { - if (DatabaseCatalog::SYSTEM_DATABASE == database_name) - return true; - } return false; } diff --git a/src/Parsers/formatTenantDatabaseName.h b/src/Parsers/formatTenantDatabaseName.h index 0872ddf452..aa68665426 100644 --- a/src/Parsers/formatTenantDatabaseName.h +++ b/src/Parsers/formatTenantDatabaseName.h @@ -7,8 +7,6 @@ namespace DB class Context; -void setEnableTenantSystemDB(bool v); - // database_name -> tenant_id.[catalog$$].database_name String formatTenantDatabaseName(const String & database_name); diff --git a/tests/queries/4_cnch_stateless/65006_tenant_fix.reference b/tests/queries/4_cnch_stateless/65006_tenant_fix.reference new file mode 100644 index 0000000000..0adc7d86f6 --- /dev/null +++ b/tests/queries/4_cnch_stateless/65006_tenant_fix.reference @@ -0,0 +1,17 @@ +----- check for X.Y.Z selecting ------ +2 2 2 +3 3 3 +1 1 1 +4 4 4 +0 0 0 +Df Df Df Df + +ABC ABC ABC ABC + + +----- check for X.Y.Z selecting for multi-table------ +2 2 2 Df Df Df +3 3 3 +1 1 1 ABC ABC ABC +4 4 4 +0 0 0 diff --git a/tests/queries/4_cnch_stateless/65006_tenant_fix.sql b/tests/queries/4_cnch_stateless/65006_tenant_fix.sql new file mode 100644 index 0000000000..7710825938 --- /dev/null +++ b/tests/queries/4_cnch_stateless/65006_tenant_fix.sql @@ -0,0 +1,13 @@ +DROP DATABASE IF EXISTS test_db; +CREATE DATABASE test_db; + +SELECT '----- check for X.Y.Z selecting ------'; +CREATE TABLE test_db.test_tb (arr Array(String), id UInt32) Engine = CnchMergeTree ORDER BY tuple(); +insert into test_db.test_tb values (['Abc','Df','Q'], 2), (['Abc','DEFQ'], 3), (['ABC','Q','ERT'], 1), (['Ab','ber'], 4), (['A'], 0); +select test_db.test_tb.id, test_tb.id, id from test_db.test_tb; +select test_db.test_tb.arr[id], test_tb.arr[id], arr[id], arr[test_db.test_tb.id] from test_db.test_tb; + +SELECT '----- check for X.Y.Z selecting for multi-table------'; +CREATE TABLE test_db.test_tb1 (arr Array(String), id UInt32) Engine = CnchMergeTree ORDER BY tuple(); +insert into test_db.test_tb1 values (['Abc','Df','Q'], 0), (['Abc','DEFQ'], 2), (['ABC','Q','ERT'], 1), (['Ab','ber'], 3), (['A'], 4); +select test_db.test_tb.id, test_db.test_tb1.id, id, arr[id], arr[test_db.test_tb.id], test_db.test_tb.arr[id] from test_db.test_tb join test_db.test_tb1 on test_db.test_tb.id = test_db.test_tb1.id and test_tb.id = test_db.test_tb1.id; \ No newline at end of file