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 DescribePathSettings = NYdb::NScheme::TDescribePathSettings;
41using ListDirectorySettings = NYdb::NScheme::TListDirectorySettings;
42using MakeDirectorySettings = NYdb::NScheme::TMakeDirectorySettings;
43using RemoveDirectorySettings = NYdb::NScheme::TRemoveDirectorySettings;
45using BulkUpsertSettings = NYdb::NTable::TBulkUpsertSettings;
46using CreateTableSettings = NYdb::NTable::TCreateTableSettings;
47using DescribeTableSettings = NYdb::NTable::TDescribeTableSettings;
48using DropTableSettings = NYdb::NTable::TDropTableSettings;
49using ScanQuerySettings = NYdb::NTable::TStreamExecScanQuerySettings;
56using DynamicTransactionName = utils::StrongTypedef<
struct DynamicTransactionNameTag, std::string>;
58class TableClient
final {
63 impl::TableSettings settings,
64 OperationSettings operation_settings,
65 dynamic_config::Source config_source,
66 std::shared_ptr<impl::Driver> driver
75 void MakeDirectory(
const std::string& path, MakeDirectorySettings query_settings = {});
76 void RemoveDirectory(
const std::string& path, RemoveDirectorySettings query_settings = {});
78 NYdb::NScheme::TDescribePathResult DescribePath(std::string_view path, DescribePathSettings query_settings = {});
79 NYdb::NScheme::TListDirectoryResult ListDirectory(std::string_view path, ListDirectorySettings query_settings = {});
81 NYdb::NTable::TDescribeTableResult DescribeTable(std::string_view path, DescribeTableSettings query_settings = {});
83 std::string_view path,
84 NYdb::NTable::TTableDescription&& table_desc,
85 CreateTableSettings query_settings = {}
87 void DropTable(std::string_view path, DropTableSettings query_settings = {});
104 template <
typename... Args>
105 ExecuteResponse ExecuteDataQuery(
const Query& query, Args&&... args);
107 template <
typename... Args>
108 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args);
110 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
112 ExecuteResponse ExecuteDataQuery(
113 QuerySettings query_settings,
114 OperationSettings settings,
116 PreparedArgsBuilder&& builder
126 Transaction Begin(utils::StringLiteral transaction_name, OperationSettings settings = {});
131 Transaction
Begin(DynamicTransactionName transaction_name, OperationSettings settings = {});
133 Transaction Begin(utils::StringLiteral transaction_name, TransactionMode tx_mode);
141 std::string_view table,
143 OperationSettings settings = {},
144 BulkUpsertSettings query_settings = {}
149 template <
typename RangeOfStructs>
150 void BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings = {});
154 std::string_view table,
155 NYdb::NTable::TReadTableSettings&& read_settings = {},
156 OperationSettings settings = {}
163 template <
typename... Args>
164 ScanQueryResults ExecuteScanQuery(
const Query& query, Args&&... args);
166 template <
typename... Args>
167 ScanQueryResults ExecuteScanQuery(
168 ScanQuerySettings&& scan_settings,
169 OperationSettings settings,
174 ScanQueryResults ExecuteScanQuery(
175 ScanQuerySettings&& scan_settings,
176 OperationSettings settings,
178 PreparedArgsBuilder&& builder
197 template <
typename... Args>
198 ExecuteResponse ExecuteQuery(
const Query& query, Args&&... args);
200 template <
typename... Args>
201 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args);
203 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
205 ExecuteResponse ExecuteQuery(
206 NYdb::NQuery::TExecuteQuerySettings&& exec_settings,
207 OperationSettings settings,
209 PreparedArgsBuilder&& builder
215 friend void DumpMetric(utils::statistics::Writer& writer,
const TableClient& table_client);
225 NYdb::NQuery::TQueryClient& GetNativeQueryClient();
228 utils::RetryBudget& GetRetryBudget();
231 friend class Transaction;
232 friend struct impl::RequestContext;
234 std::string JoinDbPath(std::string_view path)
const;
238 NYdb::NTable::TExecDataQuerySettings ToExecQuerySettings(QuerySettings query_settings)
const;
240 template <
typename... Args>
241 PreparedArgsBuilder MakeBuilder(Args&&... args);
249 template <
typename QuerySettings,
typename Func>
250 auto ExecuteWithPathImpl(
251 std::string_view path,
252 std::string_view operation_name,
253 OperationSettings settings,
254 QuerySettings&& query_settings,
258 dynamic_config::Source config_source_;
259 const OperationSettings default_settings_;
260 const bool keep_in_query_cache_;
261 std::unique_ptr<impl::Stats> stats_;
262 std::shared_ptr<impl::Driver> driver_;
263 std::unique_ptr<NYdb::NScheme::TSchemeClient> scheme_client_;
264 std::unique_ptr<NYdb::NTable::TTableClient> table_client_;
265 std::unique_ptr<NYdb::NQuery::TQueryClient> query_client_;
268template <
typename... Args>
269PreparedArgsBuilder TableClient::MakeBuilder(Args&&... args) {
271 builder.AddParams(std::forward<Args>(args)...);
275template <
typename... Args>
276ExecuteResponse TableClient::ExecuteDataQuery(
const Query& query, Args&&... args) {
277 return ExecuteDataQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
280template <
typename... Args>
281ExecuteResponse TableClient::ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args) {
282 return ExecuteDataQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));
285template <
typename RangeOfStructs>
286void TableClient::
BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings) {
287 NYdb::TValueBuilder builder;
288 ydb::Write(builder, rows);
292template <
typename... Args>
293ScanQueryResults TableClient::ExecuteScanQuery(
const Query& query, Args&&... args) {
294 return ExecuteScanQuery(ScanQuerySettings{}, OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
297template <
typename... Args>
298ScanQueryResults TableClient::ExecuteScanQuery(
299 ScanQuerySettings&& scan_settings,
300 OperationSettings settings,
304 return ExecuteScanQuery(
305 std::move(scan_settings),
308 MakeBuilder(std::forward<Args>(args)...)
312template <
typename... Args>
313ExecuteResponse TableClient::ExecuteQuery(
const Query& query, Args&&... args) {
314 return ExecuteQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
317template <
typename... Args>
318ExecuteResponse TableClient::ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args) {
319 return ExecuteQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));