From 23f0701fc8689d12839c265d894c9aff98f0ae92 Mon Sep 17 00:00:00 2001 From: Tuan Pham Anh Date: Thu, 5 Sep 2024 08:45:11 +0000 Subject: [PATCH] Throw an error if CREATE ... CLONE AS ... with a Replicated database --- src/Interpreters/InterpreterCreateQuery.cpp | 7 +++++++ .../03231_create_with_clone_as.reference | 7 +++++++ .../0_stateless/03231_create_with_clone_as.sh | 20 ++++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Interpreters/InterpreterCreateQuery.cpp b/src/Interpreters/InterpreterCreateQuery.cpp index 6506e99a14d..9ba8254630d 100644 --- a/src/Interpreters/InterpreterCreateQuery.cpp +++ b/src/Interpreters/InterpreterCreateQuery.cpp @@ -1501,6 +1501,13 @@ BlockIO InterpreterCreateQuery::createTable(ASTCreateQuery & create) } } + if (database && database->getEngineName() == "Replicated" && create.is_clone_as) + { + throw Exception( + ErrorCodes::SUPPORT_IS_DISABLED, + "CREATE CLONE AS is not supported with Replicated databases. Consider using separate CREATE and INSERT queries."); + } + if (database && database->shouldReplicateQuery(getContext(), query_ptr)) { chassert(!ddl_guard); diff --git a/tests/queries/0_stateless/03231_create_with_clone_as.reference b/tests/queries/0_stateless/03231_create_with_clone_as.reference index e57d65429cb..a94576269fb 100644 --- a/tests/queries/0_stateless/03231_create_with_clone_as.reference +++ b/tests/queries/0_stateless/03231_create_with_clone_as.reference @@ -22,3 +22,10 @@ from foo_replacing_merge_tree from clone_as_foo_replacing_merge_tree 1 a 2 b +s1 r1 OK 0 0 +CREATE TABLE imdb_03231.foo_merge_tree\n(\n `x` Int8,\n `y` String\n)\nENGINE = MergeTree\nPRIMARY KEY x\nORDER BY x\nSETTINGS index_granularity = 8192 +from imdb_03231.foo_merge_tree +1 a +2 b +1 +s1 r1 OK 0 0 diff --git a/tests/queries/0_stateless/03231_create_with_clone_as.sh b/tests/queries/0_stateless/03231_create_with_clone_as.sh index 5424cc1cfc5..eaa1046b774 100755 --- a/tests/queries/0_stateless/03231_create_with_clone_as.sh +++ b/tests/queries/0_stateless/03231_create_with_clone_as.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# Tags: no-replicated-database CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh @@ -63,4 +64,21 @@ ${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS clone_as_foo_file" ${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS foo_merge_tree" ${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS clone_as_foo_merge_tree" ${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS foo_replacing_merge_tree" -${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS clone_as_foo_replacing_merge_tree" \ No newline at end of file +${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS clone_as_foo_replacing_merge_tree" + +# CLONE AS with a Replicated database +${CLICKHOUSE_CLIENT} -q "DROP DATABASE IF EXISTS imdb_03231" + +${CLICKHOUSE_CLIENT} -q "CREATE DATABASE imdb_03231 ENGINE = Replicated('/test/databases/imdb_03231', 's1', 'r1')" + +${CLICKHOUSE_CLIENT} --optimize_throw_if_noop 1 -q "CREATE TABLE imdb_03231.foo_merge_tree (x Int8, y String) ENGINE=MergeTree PRIMARY KEY x" +${CLICKHOUSE_CLIENT} --optimize_throw_if_noop 1 -q "SHOW CREATE TABLE imdb_03231.foo_merge_tree" +${CLICKHOUSE_CLIENT} --optimize_throw_if_noop 1 -q "INSERT INTO imdb_03231.foo_merge_tree VALUES (1, 'a'), (2, 'b')" +echo "from imdb_03231.foo_merge_tree" +${CLICKHOUSE_CLIENT} --optimize_throw_if_noop 1 -q "SELECT * FROM imdb_03231.foo_merge_tree" +echo "$(${CLICKHOUSE_CLIENT} --optimize_throw_if_noop 1 --server_logs_file=/dev/null -q "CREATE TABLE imdb_03231.clone_as_foo_merge_tree CLONE AS imdb_03231.foo_merge_tree" 2>&1)" \ + | grep -c 'Code: 344. DB::Exception: .* CREATE CLONE AS is not supported with Replicated databases. Consider using separate CREATE and INSERT queries.' + +${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS imdb_03231.clone_as_foo_merge_tree" +${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS imdb_03231.foo_merge_tree" +${CLICKHOUSE_CLIENT} -q "DROP DATABASE IF EXISTS imdb_03231" \ No newline at end of file