diff --git a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h index d8a1a6d9e820..df5b02d91678 100644 --- a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h +++ b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h @@ -22,6 +22,8 @@ class ColumnFamily; class CreateTableRequest; class Changefeed; class ChangefeedDescription; +class DescribeExternalDataSourceResult; +class DescribeExternalTableResult; class DescribeTableResult; class ExplicitPartitions; class GlobalIndexSettings; @@ -1068,11 +1070,16 @@ class TRenameItem { //////////////////////////////////////////////////////////////////////////////// +class TDescribeExternalDataSourceResult; +class TDescribeExternalTableResult; + using TAsyncCreateSessionResult = NThreading::TFuture; using TAsyncDataQueryResult = NThreading::TFuture; using TAsyncPrepareQueryResult = NThreading::TFuture; using TAsyncExplainDataQueryResult = NThreading::TFuture; using TAsyncDescribeTableResult = NThreading::TFuture; +using TAsyncDescribeExternalDataSourceResult = NThreading::TFuture; +using TAsyncDescribeExternalTableResult = NThreading::TFuture; using TAsyncBeginTransactionResult = NThreading::TFuture; using TAsyncCommitTransactionResult = NThreading::TFuture; using TAsyncTablePartIterator = NThreading::TFuture; @@ -1694,6 +1701,10 @@ struct TDescribeTableSettings : public TOperationRequestSettings {}; + +struct TDescribeExternalTableSettings : public TOperationRequestSettings {}; + struct TExplainDataQuerySettings : public TOperationRequestSettings { FLUENT_SETTING_DEFAULT(bool, WithCollectFullDiagnostics, false); }; @@ -1778,6 +1789,12 @@ class TSession { TAsyncDescribeTableResult DescribeTable(const std::string& path, const TDescribeTableSettings& settings = TDescribeTableSettings()); + TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const std::string& path, + const TDescribeExternalDataSourceSettings& settings = {}); + + TAsyncDescribeExternalTableResult DescribeExternalTable(const std::string& path, + const TDescribeExternalTableSettings& settings = {}); + TAsyncBeginTransactionResult BeginTransaction(const TTxSettings& txSettings = TTxSettings(), const TBeginTxSettings& settings = TBeginTxSettings()); @@ -2194,5 +2211,57 @@ class TReadRowsResult : public TStatus { } }; +class TExternalDataSourceDescription { +public: + TExternalDataSourceDescription(Ydb::Table::DescribeExternalDataSourceResult&& description); + +private: + class TImpl; + std::shared_ptr Impl_; + + friend class NYdb::V3::TProtoAccessor; + const Ydb::Table::DescribeExternalDataSourceResult& GetProto() const; +}; + +//! Represents the result of a DescribeExternalDataSource call. +class TDescribeExternalDataSourceResult : public NScheme::TDescribePathResult { +public: + TDescribeExternalDataSourceResult( + TStatus&& status, + Ydb::Table::DescribeExternalDataSourceResult&& description + ); + + TExternalDataSourceDescription GetExternalDataSourceDescription() const; + +private: + TExternalDataSourceDescription ExternalDataSourceDescription_; +}; + +class TExternalTableDescription { +public: + TExternalTableDescription(Ydb::Table::DescribeExternalTableResult&& description); + +private: + class TImpl; + std::shared_ptr Impl_; + + friend class NYdb::V3::TProtoAccessor; + const Ydb::Table::DescribeExternalTableResult& GetProto() const; +}; + +//! Represents the result of a DescribeExternalTable call. +class TDescribeExternalTableResult : public NScheme::TDescribePathResult { +public: + TDescribeExternalTableResult( + TStatus&& status, + Ydb::Table::DescribeExternalTableResult&& description + ); + + TExternalTableDescription GetExternalTableDescription() const; + +private: + TExternalTableDescription ExternalTableDescription_; +}; + } // namespace NTable } // namespace NYdb diff --git a/ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp b/ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp index 25fdbcf54e9b..af68960e836a 100644 --- a/ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp +++ b/ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp @@ -557,6 +557,62 @@ TAsyncDescribeTableResult TTableClient::TImpl::DescribeTable(const std::string& return promise.GetFuture(); } +TAsyncDescribeExternalDataSourceResult TTableClient::TImpl::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) { + auto request = MakeOperationRequest(settings); + request.set_path(path); + + auto promise = NewPromise(); + + auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable { + Ydb::Table::DescribeExternalDataSourceResult proto; + if (any) { + any->UnpackTo(&proto); + } + promise.SetValue(TDescribeExternalDataSourceResult(TStatus(std::move(status)), std::move(proto))); + }; + + Connections_->RunDeferred( + std::move(request), + extractor, + &Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalDataSource, + DbDriverState_, + INITIAL_DEFERRED_CALL_DELAY, + TRpcRequestSettings::Make(settings) + ); + + return promise.GetFuture(); +} + +TAsyncDescribeExternalTableResult TTableClient::TImpl::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) { + auto request = MakeOperationRequest(settings); + request.set_path(path); + + auto promise = NewPromise(); + + auto extractor = [promise, settings](google::protobuf::Any* any, TPlainStatus status) mutable { + Ydb::Table::DescribeExternalTableResult proto; + if (any) { + any->UnpackTo(&proto); + } + promise.SetValue(TDescribeExternalTableResult(TStatus(std::move(status)), std::move(proto))); + }; + + Connections_->RunDeferred( + std::move(request), + extractor, + &Ydb::Table::V1::TableService::Stub::AsyncDescribeExternalTable, + DbDriverState_, + INITIAL_DEFERRED_CALL_DELAY, + TRpcRequestSettings::Make(settings) + ); + + return promise.GetFuture(); +} + TAsyncPrepareQueryResult TTableClient::TImpl::PrepareDataQuery(const TSession& session, const std::string& query, const TPrepareDataQuerySettings& settings) { diff --git a/ydb/public/sdk/cpp/src/client/table/impl/table_client.h b/ydb/public/sdk/cpp/src/client/table/impl/table_client.h index 002214d6da55..2fb91a634f32 100644 --- a/ydb/public/sdk/cpp/src/client/table/impl/table_client.h +++ b/ydb/public/sdk/cpp/src/client/table/impl/table_client.h @@ -66,6 +66,8 @@ class TTableClient::TImpl: public TClientImplCommon, public TFuture RenameTables(Ydb::Table::RenameTablesRequest&& request, const TRenameTablesSettings& settings); TFuture DropTable(const std::string& sessionId, const std::string& path, const TDropTableSettings& settings); TAsyncDescribeTableResult DescribeTable(const std::string& sessionId, const std::string& path, const TDescribeTableSettings& settings); + TAsyncDescribeExternalDataSourceResult DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings); + TAsyncDescribeExternalTableResult DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings); template TAsyncDataQueryResult ExecuteDataQuery(TSession& session, const std::string& query, const TTxControl& txControl, diff --git a/ydb/public/sdk/cpp/src/client/table/table.cpp b/ydb/public/sdk/cpp/src/client/table/table.cpp index ec5191590e49..4ebdbdd794d9 100644 --- a/ydb/public/sdk/cpp/src/client/table/table.cpp +++ b/ydb/public/sdk/cpp/src/client/table/table.cpp @@ -1830,6 +1830,14 @@ TAsyncDescribeTableResult TSession::DescribeTable(const std::string& path, const return Client_->DescribeTable(SessionImpl_->GetId(), path, settings); } +TAsyncDescribeExternalDataSourceResult TSession::DescribeExternalDataSource(const std::string& path, const TDescribeExternalDataSourceSettings& settings) { + return Client_->DescribeExternalDataSource(path, settings); +} + +TAsyncDescribeExternalTableResult TSession::DescribeExternalTable(const std::string& path, const TDescribeExternalTableSettings& settings) { + return Client_->DescribeExternalTable(path, settings); +} + TAsyncDataQueryResult TSession::ExecuteDataQuery(const std::string& query, const TTxControl& txControl, const TExecDataQuerySettings& settings) { @@ -3308,5 +3316,73 @@ TReadRowsResult::TReadRowsResult(TStatus&& status, TResultSet&& resultSet) , ResultSet(std::move(resultSet)) {} +//////////////////////////////////////////////////////////////////////////////// + +class TExternalDataSourceDescription::TImpl { + Ydb::Table::DescribeExternalDataSourceResult Proto_; + +public: + TImpl(Ydb::Table::DescribeExternalDataSourceResult&& description) + : Proto_(std::move(description)) + {} + + const Ydb::Table::DescribeExternalDataSourceResult& GetProto() const { + return Proto_; + } +}; + +TExternalDataSourceDescription::TExternalDataSourceDescription(Ydb::Table::DescribeExternalDataSourceResult&& description) + : Impl_(std::make_shared(std::move(description))) +{ +} + +const Ydb::Table::DescribeExternalDataSourceResult& TExternalDataSourceDescription::GetProto() const { + return Impl_->GetProto(); +} + +TDescribeExternalDataSourceResult::TDescribeExternalDataSourceResult(TStatus&& status, Ydb::Table::DescribeExternalDataSourceResult&& description) + : NScheme::TDescribePathResult(std::move(status), description.self()) + , ExternalDataSourceDescription_(std::move(description)) +{} + +TExternalDataSourceDescription TDescribeExternalDataSourceResult::GetExternalDataSourceDescription() const { + CheckStatusOk("TDescribeExternalDataSourceResult::GetExternalDataSourceDescription"); + return ExternalDataSourceDescription_; +} + +//////////////////////////////////////////////////////////////////////////////// + +class TExternalTableDescription::TImpl { + Ydb::Table::DescribeExternalTableResult Proto_; + +public: + TImpl(Ydb::Table::DescribeExternalTableResult&& description) + : Proto_(std::move(description)) + {} + + const Ydb::Table::DescribeExternalTableResult& GetProto() const { + return Proto_; + } +}; + +TExternalTableDescription::TExternalTableDescription(Ydb::Table::DescribeExternalTableResult&& description) + : Impl_(std::make_shared(std::move(description))) +{ +} + +const Ydb::Table::DescribeExternalTableResult& TExternalTableDescription::GetProto() const { + return Impl_->GetProto(); +} + +TDescribeExternalTableResult::TDescribeExternalTableResult(TStatus&& status, Ydb::Table::DescribeExternalTableResult&& description) + : NScheme::TDescribePathResult(std::move(status), description.self()) + , ExternalTableDescription_(std::move(description)) +{} + +TExternalTableDescription TDescribeExternalTableResult::GetExternalTableDescription() const { + CheckStatusOk("TDescribeExternalTableResult::GetExternalTableDescription"); + return ExternalTableDescription_; +} + } // namespace NTable } // namespace NYdb