mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
Merge pull request #67436 from iceFireser/master
Fix the problem that alter modfiy order by causes inconsistent metadata
This commit is contained in:
commit
1b67fde591
@ -1245,6 +1245,13 @@ void AlterCommands::prepare(const StorageInMemoryMetadata & metadata)
|
||||
{
|
||||
auto columns = metadata.columns;
|
||||
|
||||
auto ast_to_str = [](const ASTPtr & query) -> String
|
||||
{
|
||||
if (!query)
|
||||
return "";
|
||||
return queryToString(query);
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < size(); ++i)
|
||||
{
|
||||
auto & command = (*this)[i];
|
||||
@ -1277,6 +1284,11 @@ void AlterCommands::prepare(const StorageInMemoryMetadata & metadata)
|
||||
if (!has_column && command.if_exists)
|
||||
command.ignore = true;
|
||||
}
|
||||
else if (command.type == AlterCommand::MODIFY_ORDER_BY)
|
||||
{
|
||||
if (ast_to_str(command.order_by) == ast_to_str(metadata.sorting_key.definition_ast))
|
||||
command.ignore = true;
|
||||
}
|
||||
}
|
||||
|
||||
prepared = true;
|
||||
|
@ -0,0 +1,10 @@
|
||||
<clickhouse>
|
||||
<database_atomic_delay_before_drop_table_sec>10</database_atomic_delay_before_drop_table_sec>
|
||||
<allow_moving_table_directory_to_trash>1</allow_moving_table_directory_to_trash>
|
||||
<merge_tree>
|
||||
<initialization_retry_period>10</initialization_retry_period>
|
||||
</merge_tree>
|
||||
<max_database_replicated_create_table_thread_pool_size>50</max_database_replicated_create_table_thread_pool_size>
|
||||
<allow_experimental_transactions>42</allow_experimental_transactions>
|
||||
<async_load_databases>false</async_load_databases>
|
||||
</clickhouse>
|
@ -0,0 +1,11 @@
|
||||
<clickhouse>
|
||||
<profiles>
|
||||
<default>
|
||||
</default>
|
||||
</profiles>
|
||||
<users>
|
||||
<default>
|
||||
<profile>default</profile>
|
||||
</default>
|
||||
</users>
|
||||
</clickhouse>
|
@ -0,0 +1,70 @@
|
||||
import pytest
|
||||
|
||||
|
||||
from helpers.cluster import ClickHouseCluster
|
||||
from helpers.test_tools import assert_eq_with_retry
|
||||
|
||||
|
||||
cluster = ClickHouseCluster(__file__)
|
||||
|
||||
shard1_node = cluster.add_instance(
|
||||
"shard1_node",
|
||||
main_configs=["configs/config.xml"],
|
||||
user_configs=["configs/settings.xml"],
|
||||
with_zookeeper=True,
|
||||
stay_alive=True,
|
||||
macros={"shard": 1, "replica": 1},
|
||||
)
|
||||
|
||||
shard2_node = cluster.add_instance(
|
||||
"shard2_node",
|
||||
main_configs=["configs/config.xml"],
|
||||
user_configs=["configs/settings.xml"],
|
||||
with_zookeeper=True,
|
||||
stay_alive=True,
|
||||
macros={"shard": 2, "replica": 1},
|
||||
)
|
||||
|
||||
|
||||
all_nodes = [
|
||||
shard1_node,
|
||||
shard2_node,
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def started_cluster():
|
||||
try:
|
||||
cluster.start()
|
||||
yield cluster
|
||||
|
||||
finally:
|
||||
cluster.shutdown()
|
||||
|
||||
|
||||
def test_alter_modify_order_by(started_cluster):
|
||||
shard1_node.query("DROP DATABASE IF EXISTS alter_modify_order_by SYNC;")
|
||||
shard2_node.query("DROP DATABASE IF EXISTS alter_modify_order_by SYNC;")
|
||||
|
||||
shard1_node.query(
|
||||
"CREATE DATABASE alter_modify_order_by ENGINE = Replicated('/test/database/alter_modify_order_by', '{shard}', '{replica}');"
|
||||
)
|
||||
shard1_node.query(
|
||||
"CREATE TABLE alter_modify_order_by.t1 (id Int64, score Int64) ENGINE = ReplicatedMergeTree('/test/tables/{uuid}/{shard}', '{replica}') ORDER BY (id);"
|
||||
)
|
||||
shard1_node.query("ALTER TABLE alter_modify_order_by.t1 modify order by (id);")
|
||||
shard2_node.query(
|
||||
"CREATE DATABASE alter_modify_order_by ENGINE = Replicated('/test/database/alter_modify_order_by', '{shard}', '{replica}');"
|
||||
)
|
||||
|
||||
query = (
|
||||
"select count() from system.tables where database = 'alter_modify_order_by';"
|
||||
)
|
||||
expected = shard1_node.query(query)
|
||||
assert_eq_with_retry(shard2_node, query, expected)
|
||||
|
||||
query = "show create table alter_modify_order_by.t1;"
|
||||
assert shard1_node.query(query) == shard2_node.query(query)
|
||||
|
||||
shard1_node.query("DROP DATABASE IF EXISTS alter_modify_order_by SYNC;")
|
||||
shard2_node.query("DROP DATABASE IF EXISTS alter_modify_order_by SYNC;")
|
Loading…
Reference in New Issue
Block a user