7#include <userver/storages/postgres/options.hpp>
8#include <userver/storages/postgres/query.hpp>
9#include <userver/storages/postgres/result_set.hpp>
11#include <userver/storages/postgres/detail/connection_ptr.hpp>
12#include <userver/storages/postgres/detail/query_parameters.hpp>
14#include <userver/utils/any_movable.hpp>
15#include <userver/utils/fast_pimpl.hpp>
17USERVER_NAMESPACE_BEGIN
43class QueryQueue
final {
45 QueryQueue(
CommandControl default_cc, detail::ConnectionPtr&& conn);
47 QueryQueue(QueryQueue&&)
noexcept;
48 QueryQueue& operator=(QueryQueue&&)
noexcept;
50 QueryQueue(
const QueryQueue&) =
delete;
51 QueryQueue& operator=(
const QueryQueue&) =
delete;
62 template <
typename... Args>
67 template <
typename... Args>
68 void Push(
const Query& query,
const Args&... args);
84 struct ParamsHolder
final {
87 USERVER_NAMESPACE::
utils::AnyMovable any_params
{};
89 detail::QueryParameters params_proxy;
92 const UserTypes& GetConnectionUserTypes()
const;
94 void DoPush(
CommandControl cc,
const Query& query, ParamsHolder&& params);
96 void ValidateUsage()
const;
99 detail::ConnectionPtr conn_;
101 struct QueriesStorage;
102 USERVER_NAMESPACE::
utils::FastPimpl<QueriesStorage, 56, 8> queries_storage_;
105template <
typename... Args>
107 ParamsHolder holder{};
108 auto& params = holder.any_params.Emplace<detail::StaticQueryParameters<
sizeof...(args)>>();
109 params.Write(GetConnectionUserTypes(), args...);
110 holder.params_proxy = detail::QueryParameters{params};
111 DoPush(cc, query, std::move(holder));
114template <
typename... Args>
115void QueryQueue::
Push(
const Query& query,
const Args&... args) {
116 Push(default_cc_, query, args...);