```
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))
```
{
    return secure ? context.getTCPPortSecure().value_or(0) : context.getTCPPort();
}
static ConnectionPoolWithFailoverPtr createPool(
    const std::string & host,
    UInt16 port,
    bool secure,
    const std::string & db,
    const std::string & user,
    const std::string & password)
{
    ConnectionPoolPtrs pools;
    pools.emplace_back(std::make_shared<ConnectionPool>(
        MAX_CONNECTIONS,
        host,
        port,
        db,
        user,
        password,
        "", 
        "", 
        "ClickHouseDictionarySource",
        Protocol::Compression::Enable,
        secure ? Protocol::Secure::Enable : Protocol::Secure::Disable));
    return std::make_shared<ConnectionPoolWithFailover>(pools, LoadBalancing::RANDOM);
}
ClickHouseDictionarySource::ClickHouseDictionarySource(