10#include <userver/clients/dns/resolver_fwd.hpp>
11#include <userver/components/component_fwd.hpp>
12#include <userver/engine/deadline.hpp>
13#include <userver/utils/statistics/writer.hpp>
15#include <userver/storages/mysql/cluster_host_type.hpp>
16#include <userver/storages/mysql/command_result_set.hpp>
17#include <userver/storages/mysql/cursor_result_set.hpp>
18#include <userver/storages/mysql/impl/bind_helper.hpp>
19#include <userver/storages/mysql/options.hpp>
20#include <userver/storages/mysql/query.hpp>
21#include <userver/storages/mysql/statement_result_set.hpp>
22#include <userver/storages/mysql/transaction.hpp>
24USERVER_NAMESPACE_BEGIN
26namespace storages::
mysql {
32namespace infra::topology {
44 clients::dns::Resolver& resolver,
45 const settings::MysqlSettings& settings,
46 const components::ComponentConfig& config
58 template <
typename... Args>
71 template <
typename... Args>
73 OptionalCommandControl command_control,
104 template <
typename T>
106 OptionalCommandControl command_control,
124 template <
typename Container>
143 template <
typename Container>
145 OptionalCommandControl command_control,
148 const Container& params
166 template <
typename MapTo,
typename Container>
169 const Container& params)
const;
191 template <
typename MapTo,
typename Container>
193 OptionalCommandControl command_control,
196 const Container& params
233 OptionalCommandControl command_control,
247 template <
typename T,
typename... Args>
250 std::size_t batch_size,
269 template <
typename T,
typename... Args>
271 OptionalCommandControl command_control,
273 std::size_t batch_size,
282 static CommandControl GetDefaultCommandControl();
284 StatementResultSet DoExecute(
285 OptionalCommandControl command_control,
288 impl::io::ParamsBinderBase& params,
289 std::optional<std::size_t> batch_size
292 std::unique_ptr<infra::topology::TopologyBase> topology_;
295template <
typename... Args>
297 return Execute(std::nullopt, host_type, query, args...);
300template <
typename... Args>
302 OptionalCommandControl command_control,
307 auto params_binder = impl::BindHelper::BindParams(args...);
309 return DoExecute(command_control, host_type, query, params_binder, std::nullopt);
314 return ExecuteDecompose(std::nullopt, host_type, query, row);
319 OptionalCommandControl command_control,
324 auto params_binder = impl::BindHelper::BindRowAsParams(row);
326 return DoExecute(command_control, host_type, query, params_binder, std::nullopt);
329template <
typename Container>
331 return ExecuteBulk(std::nullopt, host_type, query, params);
334template <
typename Container>
336 OptionalCommandControl command_control,
339 const Container& params
341 UINVARIANT(!params.empty(),
"Empty params in bulk execution");
343 auto params_binder = impl::BindHelper::BindContainerAsParams(params);
345 return DoExecute(command_control, host_type, query, params_binder, std::nullopt);
348template <
typename MapTo,
typename Container>
351 return ExecuteBulkMapped<MapTo>(std::nullopt, host_type, query, params);
354template <
typename MapTo,
typename Container>
356 OptionalCommandControl command_control,
359 const Container& params
361 UINVARIANT(!params.empty(),
"Empty params in bulk execution");
363 auto params_binder = impl::BindHelper::BindContainerAsParamsMapped<MapTo>(params);
365 return DoExecute(command_control, host_type, query, params_binder, std::nullopt);
368template <
typename T,
typename... Args>
371 std::size_t batch_size,
375 return GetCursor<T>(std::nullopt, host_type, batch_size, query, args...);
378template <
typename T,
typename... Args>
380 OptionalCommandControl command_control,
382 std::size_t batch_size,
386 auto params_binder = impl::BindHelper::BindParams(args...);
388 return CursorResultSet<T>{DoExecute(command_control, host_type, query, params_binder, batch_size)};