7#include <userver/storages/sqlite/cursor_result_set.hpp>
8#include <userver/storages/sqlite/impl/binder_help.hpp>
9#include <userver/storages/sqlite/options.hpp>
10#include <userver/storages/sqlite/query.hpp>
11#include <userver/storages/sqlite/result_set.hpp>
12#include <userver/storages/sqlite/sqlite_fwd.hpp>
14USERVER_NAMESPACE_BEGIN
16namespace storages::sqlite {
23class Savepoint
final {
25 Savepoint(std::shared_ptr<infra::
ConnectionPtr> connection, std::string name);
27 Savepoint(
const Savepoint& other) =
delete;
28 Savepoint(Savepoint&& other)
noexcept;
29 Savepoint& operator=(Savepoint&&)
noexcept;
42 template <
typename... Args>
68 template <
typename Container>
69 void ExecuteMany(
const Query& query,
const Container& params)
const;
84 template <
typename T,
typename... Args>
85 CursorResultSet<T>
GetCursor(std::size_t batch_size,
const Query& query,
const Args&... args)
const;
91 Savepoint
Save(std::string name)
const;
100 ResultSet DoExecute(impl::io::ParamsBinderBase& params)
const;
101 std::string PrepareString(
const std::string& str);
102 void AssertValid()
const;
104 void AccountQueryExecute()
const noexcept;
105 void AccountQueryFailed()
const noexcept;
111template <
typename... Args>
114 AccountQueryExecute();
116 auto params_binder = impl::BindHelper::UpdateParamsBindings(query, *connection_, args...);
117 return DoExecute(params_binder);
118 }
catch (
const std::exception& err) {
119 AccountQueryFailed();
127 AccountQueryExecute();
129 auto params_binder = impl::BindHelper::UpdateRowAsParamsBindings(query, *connection_, row);
130 return DoExecute(params_binder);
131 }
catch (
const std::exception& err) {
132 AccountQueryFailed();
137template <
typename Container>
138void Savepoint::
ExecuteMany(
const Query& query,
const Container& params)
const {
140 for (
const auto& row : params) {
141 AccountQueryExecute();
143 auto params_binder = impl::BindHelper::UpdateRowAsParamsBindings(query, *connection_, row);
144 DoExecute(params_binder);
145 }
catch (
const std::exception& err) {
146 AccountQueryFailed();
152template <
typename T,
typename... Args>
153CursorResultSet<T> Savepoint::
GetCursor(std::size_t batch_size,
const Query& query,
const Args&... args)
const {
155 AccountQueryExecute();
157 auto params_binder = impl::BindHelper::UpdateParamsBindings(query, *connection_, args...);
158 return CursorResultSet<T>{DoExecute(params_binder, connection_), batch_size};
159 }
catch (
const std::exception& err) {
160 AccountQueryFailed();