mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Add test.
This commit is contained in:
parent
df681f3e82
commit
6c6faaa05d
@ -1279,6 +1279,93 @@ def test_projection():
|
||||
)
|
||||
|
||||
|
||||
def test_restore_table_not_evaluate_table_defaults():
|
||||
instance.query("CREATE DATABASE test")
|
||||
instance.query(
|
||||
"CREATE TABLE test.src(key Int64, value Int64) ENGINE=MergeTree ORDER BY key"
|
||||
)
|
||||
instance.query(
|
||||
"INSERT INTO test.src SELECT number as key, number * number AS value FROM numbers(1, 3)"
|
||||
)
|
||||
instance.query(
|
||||
"INSERT INTO test.src SELECT number as key, number * number AS value FROM numbers(6, 3)"
|
||||
)
|
||||
instance.query("CREATE USER u1")
|
||||
instance.query("GRANT SELECT ON test.src TO u1")
|
||||
instance.query(
|
||||
"CREATE DICTIONARY test.dict(key Int64, value Int64 DEFAULT -1) PRIMARY KEY key SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 DB 'test' TABLE 'src' USER u1)) LIFETIME(0) LAYOUT(FLAT())"
|
||||
)
|
||||
instance.query(
|
||||
"CREATE TABLE test.tbl(a Int64, b Int64 DEFAULT 0, c Int64 DEFAULT dictGet(test.dict, 'value', b)) ENGINE=MergeTree ORDER BY a"
|
||||
)
|
||||
instance.query(
|
||||
"INSERT INTO test.tbl (a, b) SELECT number, number + 1 FROM numbers(5)"
|
||||
)
|
||||
|
||||
backup_name = new_backup_name()
|
||||
instance.query(f"BACKUP TABLE system.users, DATABASE test TO {backup_name}")
|
||||
|
||||
instance.query("DROP USER u1")
|
||||
|
||||
instance.query(
|
||||
f"RESTORE TABLE system.users, DATABASE test AS test2 FROM {backup_name}"
|
||||
)
|
||||
|
||||
# RESTORE should not try to load dictionary `test2.dict`
|
||||
assert instance.query("SELECT * FROM test2.tbl ORDER BY a") == TSV(
|
||||
[[0, 1, 1], [1, 2, 4], [2, 3, 9], [3, 4, -1], [4, 5, -1]]
|
||||
)
|
||||
|
||||
assert (
|
||||
instance.query(
|
||||
"SELECT status FROM system.dictionaries WHERE name = 'dict' AND database = 'test2'"
|
||||
)
|
||||
== "NOT_LOADED\n"
|
||||
)
|
||||
|
||||
# INSERT needs dictionary `test2.dict` and it will cause loading it.
|
||||
error = "necessary to have the grant SELECT(key, value) ON test2.src" # User `u1` has no privileges for reading `test2.src`
|
||||
assert error in instance.query_and_get_error(
|
||||
"INSERT INTO test2.tbl (a, b) SELECT number, number + 1 FROM numbers(5, 5)"
|
||||
)
|
||||
|
||||
assert (
|
||||
instance.query(
|
||||
"SELECT status FROM system.dictionaries WHERE name = 'dict' AND database = 'test2'"
|
||||
)
|
||||
== "FAILED\n"
|
||||
)
|
||||
|
||||
instance.query("GRANT SELECT ON test2.src TO u1")
|
||||
instance.query("SYSTEM RELOAD DICTIONARY test2.dict")
|
||||
|
||||
assert (
|
||||
instance.query(
|
||||
"SELECT status FROM system.dictionaries WHERE name = 'dict' AND database = 'test2'"
|
||||
)
|
||||
== "LOADED\n"
|
||||
)
|
||||
|
||||
instance.query(
|
||||
"INSERT INTO test2.tbl (a, b) SELECT number, number + 1 FROM numbers(5, 5)"
|
||||
)
|
||||
|
||||
assert instance.query("SELECT * FROM test2.tbl ORDER BY a") == TSV(
|
||||
[
|
||||
[0, 1, 1],
|
||||
[1, 2, 4],
|
||||
[2, 3, 9],
|
||||
[3, 4, -1],
|
||||
[4, 5, -1],
|
||||
[5, 6, 36],
|
||||
[6, 7, 49],
|
||||
[7, 8, 64],
|
||||
[8, 9, -1],
|
||||
[9, 10, -1],
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def test_system_functions():
|
||||
instance.query("CREATE FUNCTION linear_equation AS (x, k, b) -> k*x + b;")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user