11#include <userver/clients/dns/resolver_fwd.hpp>
12#include <userver/components/component_fwd.hpp>
14#include <userver/storages/clickhouse/fwd.hpp>
15#include <userver/storages/clickhouse/impl/insertion_request.hpp>
16#include <userver/storages/clickhouse/impl/pool.hpp>
17#include <userver/storages/clickhouse/options.hpp>
18#include <userver/storages/clickhouse/query.hpp>
19#include <userver/utils/statistics/writer.hpp>
21USERVER_NAMESPACE_BEGIN
29struct ClickhouseSettings;
46 clients::dns::Resolver& resolver,
47 const impl::ClickhouseSettings& settings,
48 const components::ComponentConfig& config
53 Cluster(
const Cluster&) =
delete;
60 template <
typename... Args>
61 ExecutionResult
Execute(
const Query& query,
const Args&... args)
const;
71 template <
typename... Args>
72 ExecutionResult
Execute(OptionalCommandControl,
const Query& query,
const Args&... args)
const;
87 void Insert(
const std::string& table_name,
const std::vector<std::string_view>& column_names,
const T& data)
const;
99 OptionalCommandControl optional_cc,
100 const std::string& table_name,
101 const std::vector<std::string_view>& column_names,
116 template <
typename Container>
118 const std::string& table_name,
119 const std::vector<std::string_view>& column_names,
120 const Container& data
136 template <
typename Container>
138 OptionalCommandControl optional_cc,
139 const std::string& table_name,
140 const std::vector<std::string_view>& column_names,
141 const Container& data
149 using std::runtime_error::runtime_error;
153 void DoInsert(OptionalCommandControl,
const impl::InsertionRequest& request)
const;
155 ExecutionResult DoExecute(OptionalCommandControl,
const Query& query)
const;
157 const impl::Pool& GetPool()
const;
159 std::vector<impl::Pool> pools_;
160 mutable std::atomic<std::size_t> current_pool_ind_{0};
164void Cluster::
Insert(
const std::string& table_name,
const std::vector<std::string_view>& column_names,
const T& data)
166 Insert(OptionalCommandControl{}, table_name, column_names, data);
171 OptionalCommandControl optional_cc,
172 const std::string& table_name,
173 const std::vector<std::string_view>& column_names,
176 const auto request = impl::InsertionRequest::Create(table_name, column_names, data);
178 DoInsert(optional_cc, request);
181template <
typename Container>
183 const std::string& table_name,
184 const std::vector<std::string_view>& column_names,
185 const Container& data
187 InsertRows(OptionalCommandControl{}, table_name, column_names, data);
190template <
typename Container>
192 OptionalCommandControl optional_cc,
193 const std::string& table_name,
194 const std::vector<std::string_view>& column_names,
195 const Container& data
197 if (data.empty())
return;
199 const auto request = impl::InsertionRequest::CreateFromRows(table_name, column_names, data);
201 DoInsert(optional_cc, request);
204template <
typename... Args>
205ExecutionResult Cluster::
Execute(
const Query& query,
const Args&... args)
const {
206 return Execute(OptionalCommandControl{}, query, args...);
209template <
typename... Args>
210ExecutionResult Cluster::
Execute(OptionalCommandControl optional_cc,
const Query& query,
const Args&... args)
const {
211 const auto formatted_query = impl::WithArgs(query, args...);
212 return DoExecute(optional_cc, formatted_query);