2020-05-13 14:14:05 +00:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
|
|
|
2020-09-16 04:26:10 +00:00
|
|
|
node_old = cluster.add_instance('node1', main_configs=['configs/remote_servers.xml'], image='yandex/clickhouse-server',
|
|
|
|
tag='19.17.8.54', stay_alive=True, with_installed_binary=True)
|
2020-05-13 14:14:05 +00:00
|
|
|
node_new = cluster.add_instance('node2', main_configs=['configs/remote_servers.xml'])
|
|
|
|
|
2020-09-16 04:26:10 +00:00
|
|
|
|
2020-05-13 14:14:05 +00:00
|
|
|
@pytest.fixture(scope="module")
|
|
|
|
def started_cluster():
|
|
|
|
try:
|
|
|
|
cluster.start()
|
|
|
|
|
|
|
|
for node in (node_old, node_new):
|
|
|
|
node.query("CREATE TABLE local_table(id UInt32, val String) ENGINE = MergeTree ORDER BY id")
|
|
|
|
|
|
|
|
node_old.query("INSERT INTO local_table VALUES (1, 'node1')")
|
|
|
|
node_new.query("INSERT INTO local_table VALUES (2, 'node2')")
|
|
|
|
|
2020-09-16 04:26:10 +00:00
|
|
|
node_old.query(
|
|
|
|
"CREATE TABLE distributed(id UInt32, val String) ENGINE = Distributed(test_cluster, default, local_table)")
|
|
|
|
node_new.query(
|
|
|
|
"CREATE TABLE distributed(id UInt32, val String) ENGINE = Distributed(test_cluster, default, local_table)")
|
2020-05-13 14:14:05 +00:00
|
|
|
|
|
|
|
yield cluster
|
|
|
|
|
|
|
|
finally:
|
|
|
|
cluster.shutdown()
|
|
|
|
|
2020-09-16 04:26:10 +00:00
|
|
|
|
2020-05-13 14:14:05 +00:00
|
|
|
def test_distributed_in_tuple(started_cluster):
|
|
|
|
query1 = "SELECT count() FROM distributed WHERE (id, val) IN ((1, 'node1'), (2, 'a'), (3, 'b'))"
|
|
|
|
query2 = "SELECT sum((id, val) IN ((1, 'node1'), (2, 'a'), (3, 'b'))) FROM distributed"
|
|
|
|
assert node_old.query(query1) == "1\n"
|
|
|
|
assert node_old.query(query2) == "1\n"
|
|
|
|
assert node_new.query(query1) == "1\n"
|
|
|
|
assert node_new.query(query2) == "1\n"
|
|
|
|
|
|
|
|
large_set = '(' + ','.join([str(i) for i in range(1000)]) + ')'
|
|
|
|
query3 = "SELECT count() FROM distributed WHERE id IN " + large_set
|
|
|
|
query4 = "SELECT sum(id IN {}) FROM distributed".format(large_set)
|
|
|
|
assert node_old.query(query3) == "2\n"
|
|
|
|
assert node_old.query(query4) == "2\n"
|
|
|
|
assert node_new.query(query3) == "2\n"
|
2020-05-14 20:44:52 +00:00
|
|
|
assert node_new.query(query4) == "2\n"
|