mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge pull request #23047 from ClickHouse/fix_attach_mv
Fix attach MV in Atomic database
This commit is contained in:
commit
7614a18ff2
@ -723,7 +723,7 @@ static void generateUUIDForTable(ASTCreateQuery & create)
|
|||||||
/// If destination table (to_table_id) is not specified for materialized view,
|
/// If destination table (to_table_id) is not specified for materialized view,
|
||||||
/// then MV will create inner table. We should generate UUID of inner table here,
|
/// then MV will create inner table. We should generate UUID of inner table here,
|
||||||
/// so it will be the same on all hosts if query in ON CLUSTER or database engine is Replicated.
|
/// so it will be the same on all hosts if query in ON CLUSTER or database engine is Replicated.
|
||||||
bool need_uuid_for_inner_table = create.is_materialized_view && !create.to_table_id;
|
bool need_uuid_for_inner_table = !create.attach && create.is_materialized_view && !create.to_table_id;
|
||||||
if (need_uuid_for_inner_table && create.to_inner_uuid == UUIDHelpers::Nil)
|
if (need_uuid_for_inner_table && create.to_inner_uuid == UUIDHelpers::Nil)
|
||||||
create.to_inner_uuid = UUIDHelpers::generateV4();
|
create.to_inner_uuid = UUIDHelpers::generateV4();
|
||||||
}
|
}
|
||||||
|
@ -76,10 +76,15 @@ StorageMaterializedView::StorageMaterializedView(
|
|||||||
storage_metadata.setSelectQuery(select);
|
storage_metadata.setSelectQuery(select);
|
||||||
setInMemoryMetadata(storage_metadata);
|
setInMemoryMetadata(storage_metadata);
|
||||||
|
|
||||||
|
bool point_to_itself_by_uuid = has_inner_table && query.to_inner_uuid != UUIDHelpers::Nil
|
||||||
|
&& query.to_inner_uuid == table_id_.uuid;
|
||||||
|
bool point_to_itself_by_name = !has_inner_table && query.to_table_id.database_name == table_id_.database_name
|
||||||
|
&& query.to_table_id.table_name == table_id_.table_name;
|
||||||
|
if (point_to_itself_by_uuid || point_to_itself_by_name)
|
||||||
|
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Materialized view {} cannot point to itself", table_id_.getFullTableName());
|
||||||
|
|
||||||
if (!has_inner_table)
|
if (!has_inner_table)
|
||||||
{
|
{
|
||||||
if (query.to_table_id.database_name == table_id_.database_name && query.to_table_id.table_name == table_id_.table_name)
|
|
||||||
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Materialized view {} cannot point to itself", table_id_.getFullTableName());
|
|
||||||
target_table_id = query.to_table_id;
|
target_table_id = query.to_table_id;
|
||||||
}
|
}
|
||||||
else if (attach_)
|
else if (attach_)
|
||||||
|
22
tests/queries/0_stateless/01153_attach_mv_uuid.reference
Normal file
22
tests/queries/0_stateless/01153_attach_mv_uuid.reference
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
3 9
|
||||||
|
4 16
|
||||||
|
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
3 9
|
||||||
|
4 16
|
||||||
|
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\' TO INNER UUID \'3bd68e3c-2693-4352-ad66-a66eba9e345e\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
CREATE MATERIALIZED VIEW default.mv UUID \'e15f3ab5-6cae-4df3-b879-f40deafd82c2\' TO INNER UUID \'3bd68e3c-2693-4352-ad66-a66eba9e345e\'\n(\n `n` Int32,\n `n2` Int64\n)\nENGINE = MergeTree\nPARTITION BY n % 10\nORDER BY n AS\nSELECT\n n,\n n * n AS n2\nFROM default.src
|
||||||
|
1 1
|
||||||
|
2 4
|
||||||
|
3 9
|
||||||
|
4 16
|
42
tests/queries/0_stateless/01153_attach_mv_uuid.sql
Normal file
42
tests/queries/0_stateless/01153_attach_mv_uuid.sql
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
DROP TABLE IF EXISTS src;
|
||||||
|
DROP TABLE IF EXISTS mv;
|
||||||
|
DROP TABLE IF EXISTS ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2";
|
||||||
|
|
||||||
|
CREATE TABLE src (n UInt64) ENGINE=MergeTree ORDER BY n;
|
||||||
|
CREATE MATERIALIZED VIEW mv (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||||
|
INSERT INTO src VALUES (1), (2);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DETACH TABLE mv;
|
||||||
|
ATTACH TABLE mv;
|
||||||
|
INSERT INTO src VALUES (3), (4);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DROP TABLE mv SYNC;
|
||||||
|
|
||||||
|
SET show_table_uuid_in_table_create_query_if_not_nil=1;
|
||||||
|
CREATE TABLE ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2" (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n;
|
||||||
|
ATTACH MATERIALIZED VIEW mv UUID 'e15f3ab5-6cae-4df3-b879-f40deafd82c2' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||||
|
SHOW CREATE TABLE mv;
|
||||||
|
INSERT INTO src VALUES (1), (2);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DETACH TABLE mv;
|
||||||
|
ATTACH TABLE mv;
|
||||||
|
SHOW CREATE TABLE mv;
|
||||||
|
INSERT INTO src VALUES (3), (4);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DROP TABLE mv SYNC;
|
||||||
|
|
||||||
|
CREATE TABLE ".inner_id.e15f3ab5-6cae-4df3-b879-f40deafd82c2" UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n;
|
||||||
|
ATTACH MATERIALIZED VIEW mv UUID 'e15f3ab5-6cae-4df3-b879-f40deafd82c2' TO INNER UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src;
|
||||||
|
SHOW CREATE TABLE mv;
|
||||||
|
INSERT INTO src VALUES (1), (2);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DETACH TABLE mv;
|
||||||
|
ATTACH TABLE mv;
|
||||||
|
SHOW CREATE TABLE mv;
|
||||||
|
INSERT INTO src VALUES (3), (4);
|
||||||
|
SELECT * FROM mv ORDER BY n;
|
||||||
|
DROP TABLE mv SYNC;
|
||||||
|
|
||||||
|
ATTACH MATERIALIZED VIEW mv UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' TO INNER UUID '3bd68e3c-2693-4352-ad66-a66eba9e345e' (n Int32, n2 Int64) ENGINE = MergeTree PARTITION BY n % 10 ORDER BY n AS SELECT n, n * n AS n2 FROM src; -- { serverError 36 }
|
||||||
|
|
||||||
|
DROP TABLE src;
|
@ -91,6 +91,7 @@
|
|||||||
01125_dict_ddl_cannot_add_column
|
01125_dict_ddl_cannot_add_column
|
||||||
01129_dict_get_join_lose_constness
|
01129_dict_get_join_lose_constness
|
||||||
01138_join_on_distributed_and_tmp
|
01138_join_on_distributed_and_tmp
|
||||||
|
01153_attach_mv_uuid
|
||||||
01191_rename_dictionary
|
01191_rename_dictionary
|
||||||
01200_mutations_memory_consumption
|
01200_mutations_memory_consumption
|
||||||
01211_optimize_skip_unused_shards_type_mismatch
|
01211_optimize_skip_unused_shards_type_mismatch
|
||||||
|
@ -105,7 +105,8 @@
|
|||||||
"00604_show_create_database",
|
"00604_show_create_database",
|
||||||
"00609_mv_index_in_in",
|
"00609_mv_index_in_in",
|
||||||
"00510_materizlized_view_and_deduplication_zookeeper",
|
"00510_materizlized_view_and_deduplication_zookeeper",
|
||||||
"00738_lock_for_inner_table"
|
"00738_lock_for_inner_table",
|
||||||
|
"01153_attach_mv_uuid"
|
||||||
],
|
],
|
||||||
"database-replicated": [
|
"database-replicated": [
|
||||||
"memory_tracking",
|
"memory_tracking",
|
||||||
@ -557,6 +558,7 @@
|
|||||||
"01135_default_and_alter_zookeeper",
|
"01135_default_and_alter_zookeeper",
|
||||||
"01148_zookeeper_path_macros_unfolding",
|
"01148_zookeeper_path_macros_unfolding",
|
||||||
"01150_ddl_guard_rwr",
|
"01150_ddl_guard_rwr",
|
||||||
|
"01153_attach_mv_uuid",
|
||||||
"01152_cross_replication",
|
"01152_cross_replication",
|
||||||
"01185_create_or_replace_table",
|
"01185_create_or_replace_table",
|
||||||
"01190_full_attach_syntax",
|
"01190_full_attach_syntax",
|
||||||
|
Loading…
Reference in New Issue
Block a user