```
milovidov-desktop :) CREATE DICTIONARY dict
:-] (
:-]     k1 UInt64,
:-]     k2 UInt8,
:-]     value String
:-] )
:-] PRIMARY KEY k1, k2
:-] SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict'))
:-] LIFETIME(1000)
:-] LAYOUT(COMPLEX_KEY_HASHED());

CREATE DICTIONARY dict
(
    `k1` UInt64,
    `k2` UInt8,
    `value` String
)
PRIMARY KEY k1, k2
SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict'))
LIFETIME(MIN 0 MAX 1000)
LAYOUT(COMPLEX_KEY_HASHED())

Ok.

0 rows in set. Elapsed: 0.001 sec. 

milovidov-desktop :) SELECT dictGetString('default.dict', 'third_column', (1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

SELECT dictGetString('default.dict', 'third_column', (1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
```
{
    if (update_time != std::chrono::system_clock::from_time_t(0))
    {
        time_t hr_time = std::chrono::system_clock::to_time_t(update_time) - 1;
        std::string str_time = DateLUT::instance().timeToString(hr_time);
        update_time = std::chrono::system_clock::now();
        return query_builder.composeUpdateQuery(update_field, str_time);
    }
    else
    {
        update_time = std::chrono::system_clock::now();
        return query_builder.composeLoadAllQuery();
    }
}
BlockInputStreamPtr ClickHouseDictionarySource::loadAll()
{
    return createStreamForQuery(load_all_query);
}
BlockInputStreamPtr ClickHouseDictionarySource::loadUpdatedAll()
{
    String load_update_query = getUpdateFieldAndDate();
    return createStreamForQuery(load_update_query);
}
BlockInputStreamPtr ClickHouseDictionarySource::loadIds(const std::vector<UInt64> & ids)