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;
51class TableClient
final {
56 impl::TableSettings settings,
57 OperationSettings operation_settings,
58 dynamic_config::Source config_source,
59 std::shared_ptr<impl::Driver> driver
68 void MakeDirectory(
const std::string& path, MakeDirectorySettings query_settings = {});
69 void RemoveDirectory(
const std::string& path, RemoveDirectorySettings query_settings = {});
71 NYdb::NScheme::TDescribePathResult DescribePath(std::string_view path, DescribePathSettings query_settings = {});
72 NYdb::NScheme::TListDirectoryResult ListDirectory(std::string_view path, ListDirectorySettings query_settings = {});
74 NYdb::NTable::TDescribeTableResult DescribeTable(std::string_view path, DescribeTableSettings query_settings = {});
76 std::string_view path,
77 NYdb::NTable::TTableDescription&& table_desc,
78 CreateTableSettings query_settings = {}
80 void DropTable(std::string_view path, DropTableSettings query_settings = {});
97 template <
typename... Args>
98 ExecuteResponse ExecuteDataQuery(
const Query& query, Args&&... args);
100 template <
typename... Args>
101 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args);
103 ExecuteResponse ExecuteDataQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
105 ExecuteResponse ExecuteDataQuery(
106 QuerySettings query_settings,
107 OperationSettings settings,
109 PreparedArgsBuilder&& builder
119 Transaction Begin(std::string transaction_name, OperationSettings settings = {});
121 Transaction Begin(std::string transaction_name, TransactionMode tx_mode);
129 std::string_view table,
131 OperationSettings settings = {},
132 BulkUpsertSettings query_settings = {}
137 template <
typename RangeOfStructs>
138 void BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings = {});
142 std::string_view table,
143 NYdb::NTable::TReadTableSettings&& read_settings = {},
144 OperationSettings settings = {}
151 template <
typename... Args>
152 ScanQueryResults ExecuteScanQuery(
const Query& query, Args&&... args);
154 template <
typename... Args>
156 ExecuteScanQuery(ScanQuerySettings&& scan_settings, OperationSettings settings,
const Query& query, Args&&... args);
158 ScanQueryResults ExecuteScanQuery(
159 ScanQuerySettings&& scan_settings,
160 OperationSettings settings,
162 PreparedArgsBuilder&& builder
181 template <
typename... Args>
182 ExecuteResponse ExecuteQuery(
const Query& query, Args&&... args);
184 template <
typename... Args>
185 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args);
187 ExecuteResponse ExecuteQuery(OperationSettings settings,
const Query& query, PreparedArgsBuilder&& builder);
189 ExecuteResponse ExecuteQuery(
190 NYdb::NQuery::TExecuteQuerySettings&& exec_settings,
191 OperationSettings settings,
193 PreparedArgsBuilder&& builder
199 friend void DumpMetric(utils::statistics::Writer& writer,
const TableClient& table_client);
209 NYdb::NQuery::TQueryClient& GetNativeQueryClient();
212 utils::RetryBudget& GetRetryBudget();
215 friend class Transaction;
216 friend struct impl::RequestContext;
218 std::string JoinDbPath(std::string_view path)
const;
222 NYdb::NTable::TExecDataQuerySettings ToExecQuerySettings(QuerySettings query_settings)
const;
224 template <
typename... Args>
225 PreparedArgsBuilder MakeBuilder(Args&&... args);
233 template <
typename QuerySettings,
typename Func>
234 auto ExecuteWithPathImpl(
235 std::string_view path,
236 std::string_view operation_name,
237 OperationSettings settings,
238 QuerySettings&& query_settings,
242 dynamic_config::Source config_source_;
243 const OperationSettings default_settings_;
244 const bool keep_in_query_cache_;
245 std::unique_ptr<impl::Stats> stats_;
246 std::shared_ptr<impl::Driver> driver_;
247 std::unique_ptr<NYdb::NScheme::TSchemeClient> scheme_client_;
248 std::unique_ptr<NYdb::NTable::TTableClient> table_client_;
249 std::unique_ptr<NYdb::NQuery::TQueryClient> query_client_;
252template <
typename... Args>
253PreparedArgsBuilder TableClient::MakeBuilder(Args&&... args) {
255 builder.AddParams(std::forward<Args>(args)...);
259template <
typename... Args>
260ExecuteResponse TableClient::ExecuteDataQuery(
const Query& query, Args&&... args) {
261 return ExecuteDataQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
264template <
typename... Args>
265ExecuteResponse TableClient::ExecuteDataQuery(OperationSettings settings,
const Query& query, Args&&... args) {
266 return ExecuteDataQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));
269template <
typename RangeOfStructs>
270void TableClient::
BulkUpsert(std::string_view table,
const RangeOfStructs& rows, OperationSettings settings) {
271 NYdb::TValueBuilder builder;
272 ydb::Write(builder, rows);
276template <
typename... Args>
277ScanQueryResults TableClient::ExecuteScanQuery(
const Query& query, Args&&... args) {
278 return ExecuteScanQuery(ScanQuerySettings{}, OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
281template <
typename... Args>
282ScanQueryResults TableClient::ExecuteScanQuery(
283 ScanQuerySettings&& scan_settings,
284 OperationSettings settings,
288 return ExecuteScanQuery(
289 std::move(scan_settings), std::move(settings), query, MakeBuilder(std::forward<Args>(args)...)
293template <
typename... Args>
294ExecuteResponse TableClient::ExecuteQuery(
const Query& query, Args&&... args) {
295 return ExecuteQuery(OperationSettings{}, query, MakeBuilder(std::forward<Args>(args)...));
298template <
typename... Args>
299ExecuteResponse TableClient::ExecuteQuery(OperationSettings settings,
const Query& query, Args&&... args) {
300 return ExecuteQuery(settings, query, MakeBuilder(std::forward<Args>(args)...));