ClickHouse/dbms/tests/queries/0_stateless/01036_no_superfluous_dict_reload_on_create_database_2.sql
Azat Khuzhin 65572a23fe Fix async nature of reload in 01036_no_superfluous_dict_reload_on_create_database*
Due to the async nature of SYSTEM RELOAD DICTIONARY/DICTIONARIES the
test can fail, if the reload will happen after the dictGet*():

    .862801 [ 36 ] {61df55ee-4a17-4bf3-8cfb-9478490393c3} <Debug> executeQuery: (from [::1]:37422) SYSTEM RELOAD DICTIONARY `foo 1234.dict`
    .863681 [ 36 ] {cd55d9f9-d176-4b19-bc97-d25575da2d15} <Debug> executeQuery: (from [::1]:37422) SELECT query_count FROM system.dictionaries WHERE (database = 'foo 1234') AND ...
    .863678 [ 54 ] {} <Debug> executeQuery: (internal) SELECT `key`, `val` FROM `foo 1234`.`dict_data`;

This is just a hotfix, long-term solution will be to make SYSTEM RELOAD
DICTIONARY syncronous (by adding another command or making already
existing).

Refs: #7916
2019-12-10 08:31:51 +03:00

30 lines
1.1 KiB
SQL

DROP DATABASE IF EXISTS `foo 1234`;
CREATE DATABASE `foo 1234`;
CREATE TABLE `foo 1234`.dict_data (key UInt64, val UInt64) Engine=Memory();
CREATE DICTIONARY `foo 1234`.dict
(
key UInt64 DEFAULT 0,
val UInt64 DEFAULT 10
)
PRIMARY KEY key
SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_data' PASSWORD '' DB 'foo 1234'))
LIFETIME(MIN 0 MAX 0)
LAYOUT(FLAT());
SELECT query_count FROM system.dictionaries WHERE database = 'foo 1234' AND name = 'dict';
SELECT dictGetUInt64('foo 1234.dict', 'val', toUInt64(0));
SELECT query_count FROM system.dictionaries WHERE database = 'foo 1234' AND name = 'dict';
SELECT 'SYSTEM RELOAD DICTIONARY';
SYSTEM RELOAD DICTIONARY 'foo 1234.dict';
SELECT sleep(0.3);
SELECT query_count FROM system.dictionaries WHERE database = 'foo 1234' AND name = 'dict';
SELECT dictGetUInt64('foo 1234.dict', 'val', toUInt64(0));
SELECT query_count FROM system.dictionaries WHERE database = 'foo 1234' AND name = 'dict';
SELECT 'CREATE DATABASE';
DROP DATABASE IF EXISTS `foo 123`;
CREATE DATABASE `foo 123`;
SELECT query_count FROM system.dictionaries WHERE database = 'foo 1234' AND name = 'dict';