5#include <userver/tracing/span.hpp>
6#include <userver/utils/trx_tracker.hpp>
8#include <userver/ydb/builder.hpp>
9#include <userver/ydb/exceptions.hpp>
10#include <userver/ydb/impl/stats_scope.hpp>
11#include <userver/ydb/query.hpp>
12#include <userver/ydb/response.hpp>
13#include <userver/ydb/settings.hpp>
15USERVER_NAMESPACE_BEGIN
22class Transaction
final {
24 Transaction(Transaction&&)
noexcept =
default;
25 Transaction(
const Transaction&) =
delete;
26 Transaction& operator=(Transaction&&) =
delete;
27 Transaction& operator=(
const Transaction&) =
delete;
41 template <
typename... Args>
42 ExecuteResponse
Execute(
const Query& query, Args&&... args);
44 template <
typename... Args>
45 ExecuteResponse Execute(OperationSettings settings,
const Query& query, Args&&... args);
47 ExecuteResponse Execute(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
49 ExecuteResponse Execute(
50 QuerySettings query_settings,
51 OperationSettings settings,
53 PreparedArgsBuilder&& builder
60 void Commit(OperationSettings settings = {});
66 PreparedArgsBuilder GetBuilder()
const;
71 TableClient& table_client,
72 NYdb::NTable::TTransaction ydb_tx,
74 OperationSettings&& rollback_settings
79 void MarkError()
noexcept;
82 void EnsureActive()
const;
84 TableClient& table_client_;
86 impl::StatsScope stats_scope_;
88 NYdb::NTable::TTransaction ydb_tx_;
89 OperationSettings rollback_settings_;
90 bool is_active_{
true};
91 utils::trx_tracker::TransactionLock trx_lock_;
94template <
typename... Args>
95ExecuteResponse Transaction::
Execute(
const Query& query, Args&&... args) {
96 auto builder = GetBuilder();
97 builder.AddParams(std::forward<Args>(args)...);
98 return Execute(OperationSettings{}, query, std::move(builder));
101template <
typename... Args>
102ExecuteResponse Transaction::Execute(OperationSettings settings,
const Query& query, Args&&... args) {
103 auto builder = GetBuilder();
104 builder.AddParams(std::forward<Args>(args)...);
105 return Execute(std::move(settings), query, std::move(builder));