3#include <ydb-cpp-sdk/client/query/client.h>
4#include <ydb-cpp-sdk/client/query/query.h>
5#include <ydb-cpp-sdk/client/table/table.h>
7#include <userver/dynamic_config/source.hpp>
8#include <userver/utils/statistics/fwd.hpp>
10#include <userver/ydb/builder.hpp>
11#include <userver/ydb/query.hpp>
12#include <userver/ydb/response.hpp>
13#include <userver/ydb/settings.hpp>
14#include <userver/ydb/transaction.hpp>
16namespace NMonitoring {
20USERVER_NAMESPACE_BEGIN
37enum class IsStreaming :
bool {};
40using ScanQuerySettings = NYdb::NTable::TStreamExecScanQuerySettings;
42class TableClient
final {
47 impl::TableSettings settings,
48 OperationSettings operation_settings,
49 dynamic_config::Source config_source,
50 std::shared_ptr<impl::Driver> driver
59 void MakeDirectory(
const std::string& path);
60 void RemoveDirectory(
const std::string& path);
62 NYdb::NScheme::TDescribePathResult DescribePath(std::string_view path);
63 NYdb::NScheme::TListDirectoryResult ListDirectory(std::string_view path);
65 NYdb::NTable::TDescribeTableResult DescribeTable(std::string_view path);
66 void CreateTable(std::string_view path, NYdb::NTable::TTableDescription&& table_desc);
67 void DropTable(std::string_view path);
81 template <
typename... Args>
82 ExecuteResponse ExecuteDataQuery(
const Query& query, Args&&... args);
84 template <
typename... Args>
85 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args);
87 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
89 ExecuteResponse ExecuteDataQuery(
90 QuerySettings query_settings,
91 OperationSettings settings,
93 PreparedArgsBuilder&& builder
103 Transaction Begin(std::string transaction_name, OperationSettings settings = {});
105 Transaction Begin(std::string transaction_name, TransactionMode tx_mode);
112 void BulkUpsert(std::string_view table, NYdb::TValue&& rows, OperationSettings settings = {});
116 template <
typename RangeOfStructs>
117 void BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings = {});
121 std::string_view table,
122 NYdb::NTable::TReadTableSettings&& read_settings = {},
123 OperationSettings settings = {}
130 template <
typename... Args>
131 ScanQueryResults ExecuteScanQuery(
const Query& query, Args&&... args);
133 template <
typename... Args>
135 ExecuteScanQuery(ScanQuerySettings&& scan_settings, OperationSettings settings,
const Query& query, Args&&... args);
137 ScanQueryResults ExecuteScanQuery(
138 ScanQuerySettings&& scan_settings,
139 OperationSettings settings,
141 PreparedArgsBuilder&& builder
160 template <
typename... Args>
161 ExecuteResponse ExecuteQuery(
const Query& query, Args&&... args);
163 template <
typename... Args>
164 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args);
166 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
168 ExecuteResponse ExecuteQuery(
169 NYdb::NQuery::TExecuteQuerySettings&& query_settings,
170 OperationSettings settings,
172 PreparedArgsBuilder&& builder
178 friend void DumpMetric(
utils::statistics::Writer& writer,
const TableClient& table_client);
188 NYdb::NQuery::TQueryClient& GetNativeQueryClient();
191 utils::RetryBudget& GetRetryBudget();
194 friend class Transaction;
195 friend struct impl::RequestContext;
197 std::string JoinDbPath(std::string_view path)
const;
201 NYdb::NTable::TExecDataQuerySettings ToExecQuerySettings(QuerySettings query_settings)
const;
203 template <
typename... Args>
204 PreparedArgsBuilder MakeBuilder(Args&&... args);
212 template <
typename Settings,
typename Func>
213 auto ExecuteWithPathImpl(
214 std::string_view path,
215 std::string_view operation_name,
216 OperationSettings&& settings,
220 dynamic_config::Source config_source_;
221 const OperationSettings default_settings_;
222 const bool keep_in_query_cache_;
223 std::unique_ptr<impl::Stats> stats_;
224 std::shared_ptr<impl::Driver> driver_;
225 std::unique_ptr<NYdb::NScheme::TSchemeClient> scheme_client_;
226 std::unique_ptr<NYdb::NTable::TTableClient> table_client_;
227 std::unique_ptr<NYdb::NQuery::TQueryClient> query_client_;
230template <
typename... Args>
231PreparedArgsBuilder TableClient::MakeBuilder(Args&&... args) {
233 builder.AddParams(std::forward<Args>(args)...);
237template <
typename... Args>
238ExecuteResponse TableClient::ExecuteDataQuery(
const Query& query, Args&&... args) {
239 return ExecuteDataQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
242template <
typename... Args>
243ExecuteResponse TableClient::ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args) {
244 return ExecuteDataQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));
247template <
typename RangeOfStructs>
248void TableClient::
BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings) {
249 NYdb::TValueBuilder builder;
250 ydb::Write(builder, rows);
251 BulkUpsert(table, builder.Build(), std::move(settings));
254template <
typename... Args>
255ScanQueryResults TableClient::ExecuteScanQuery(
const Query& query, Args&&... args) {
256 return ExecuteScanQuery(ScanQuerySettings{}, OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
259template <
typename... Args>
260ScanQueryResults TableClient::ExecuteScanQuery(
261 ScanQuerySettings&& scan_settings,
262 OperationSettings settings,
266 return ExecuteScanQuery(
267 std::move(scan_settings), std::move(settings), query, MakeBuilder(std::forward<Args>(args)...)
271template <
typename... Args>
272ExecuteResponse TableClient::ExecuteQuery(
const Query& query, Args&&... args) {
273 return ExecuteQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
276template <
typename... Args>
277ExecuteResponse TableClient::ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args) {
278 return ExecuteQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));