mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
import pytest
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
node1 = cluster.add_instance("node1")
|
|
node2 = cluster.add_instance("node2")
|
|
node256 = cluster.add_instance(
|
|
"node256",
|
|
image="clickhouse/clickhouse-server",
|
|
tag="25.6",
|
|
with_installed_binary=True,
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def started_cluster():
|
|
try:
|
|
cluster.start()
|
|
yield cluster
|
|
|
|
finally:
|
|
cluster.shutdown()
|
|
|
|
|
|
def test_string_aggregation_compatibility(started_cluster):
|
|
def create_tables(node, other_node_name):
|
|
node.query(
|
|
"DROP TABLE IF EXISTS repro1 SYNC; CREATE TABLE repro1 (id UInt64, s1 String, s2 LowCardinality(String)) ENGINE = MergeTree ORDER BY id"
|
|
)
|
|
node.query(
|
|
"INSERT INTO repro1 SELECT number, 'somestring', 'somestring' FROM numbers(10000)"
|
|
)
|
|
node.query(
|
|
f"CREATE TABLE IF NOT EXISTS dist_repro1 (id UInt64, s1 String, s2 LowCardinality(String)) AS remote('{other_node_name}', 'default.repro1', 'default', '')"
|
|
)
|
|
node.query(
|
|
"CREATE TABLE IF NOT EXISTS global_repro1 (id UInt64, s1 String, s2 LowCardinality(String)) ENGINE = Merge('default', '.*repro1')"
|
|
)
|
|
|
|
create_tables(node1, other_node_name=node256.name)
|
|
create_tables(node256, other_node_name=node1.name)
|
|
|
|
def run_query(node, extra_settings={}):
|
|
return int(
|
|
node.query(
|
|
"""
|
|
SELECT count()
|
|
FROM
|
|
(
|
|
SELECT
|
|
id,
|
|
s2
|
|
FROM global_repro1
|
|
GROUP BY ALL
|
|
)""",
|
|
settings={"group_by_two_level_threshold": 1} | extra_settings,
|
|
)
|
|
)
|
|
|
|
assert run_query(node1) == 10000
|
|
assert run_query(node256) == 10000
|
|
assert (
|
|
run_query(node1, extra_settings={"serialize_string_in_memory_with_zero_byte": 0})
|
|
== 20000
|
|
)
|
|
|
|
def test_string_aggregation_compatibility_setting(started_cluster):
|
|
def create_tables(n, other_node_name):
|
|
n.query(
|
|
"DROP TABLE IF EXISTS repro2 SYNC; CREATE TABLE repro2 (id UInt64, s1 String, s2 LowCardinality(String)) ENGINE = MergeTree ORDER BY id"
|
|
)
|
|
n.query(
|
|
"INSERT INTO repro2 SELECT number, 'somestring', 'somestring' FROM numbers(10000)"
|
|
)
|
|
n.query(
|
|
f"CREATE TABLE IF NOT EXISTS dist_repro2 (id UInt64, s1 String, s2 LowCardinality(String)) AS remote('{other_node_name}', 'default.repro2', 'default', '')"
|
|
)
|
|
n.query(
|
|
"CREATE TABLE IF NOT EXISTS global_repro2 (id UInt64, s1 String, s2 LowCardinality(String)) ENGINE = Merge('default', '.*repro2')"
|
|
)
|
|
|
|
create_tables(node1, other_node_name=node2.name)
|
|
create_tables(node2, other_node_name=node1.name)
|
|
|
|
def run_query(n, extra_settings={}):
|
|
return int(
|
|
n.query(
|
|
"""
|
|
SELECT count()
|
|
FROM
|
|
(
|
|
SELECT
|
|
id,
|
|
s2
|
|
FROM global_repro2
|
|
GROUP BY ALL
|
|
)""",
|
|
settings={"group_by_two_level_threshold": 1} | extra_settings,
|
|
)
|
|
)
|
|
|
|
assert run_query(node1) == 10000
|
|
assert run_query(node2) == 10000
|
|
assert (
|
|
run_query(node1, extra_settings={"serialize_string_in_memory_with_zero_byte": 0})
|
|
== 10000
|
|
)
|