Throw an error if CREATE ... CLONE AS ... with a Replicated database

This commit is contained in:
Tuan Pham Anh 2024-09-05 08:45:11 +00:00
parent 782353d831
commit 23f0701fc8
3 changed files with 33 additions and 1 deletions

View File

@ -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);

View File

@ -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

View File

@ -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"
${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"