diff options
author | Daniil Demin <deminds@ydb.tech> | 2025-02-13 00:08:07 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-12 21:08:07 +0000 |
commit | b23b0fbcf514dcdbfac9ab6a96949bb3a9e1a836 (patch) | |
tree | 7724f33a9d970cbd3828f2909f5090c12e9b2971 | |
parent | 377c8ea59ae2c1294ba35c979f2daca02004c32d (diff) | |
download | ydb-b23b0fbcf514dcdbfac9ab6a96949bb3a9e1a836.tar.gz |
External data sources: describe in SDK (#14483)
4 files changed, 203 insertions, 0 deletions
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 d8a1a6d9e8..df5b02d916 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 @@ private: //////////////////////////////////////////////////////////////////////////////// +class TDescribeExternalDataSourceResult; +class TDescribeExternalTableResult; + using TAsyncCreateSessionResult = NThreading::TFuture<TCreateSessionResult>; using TAsyncDataQueryResult = NThreading::TFuture<TDataQueryResult>; using TAsyncPrepareQueryResult = NThreading::TFuture<TPrepareQueryResult>; using TAsyncExplainDataQueryResult = NThreading::TFuture<TExplainQueryResult>; using TAsyncDescribeTableResult = NThreading::TFuture<TDescribeTableResult>; +using TAsyncDescribeExternalDataSourceResult = NThreading::TFuture<TDescribeExternalDataSourceResult>; +using TAsyncDescribeExternalTableResult = NThreading::TFuture<TDescribeExternalTableResult>; using TAsyncBeginTransactionResult = NThreading::TFuture<TBeginTransactionResult>; using TAsyncCommitTransactionResult = NThreading::TFuture<TCommitTransactionResult>; using TAsyncTablePartIterator = NThreading::TFuture<TTablePartIterator>; @@ -1694,6 +1701,10 @@ struct TDescribeTableSettings : public TOperationRequestSettings<TDescribeTableS FLUENT_SETTING_DEFAULT(bool, WithShardNodesInfo, false); }; +struct TDescribeExternalDataSourceSettings : public TOperationRequestSettings<TDescribeExternalDataSourceSettings> {}; + +struct TDescribeExternalTableSettings : public TOperationRequestSettings<TDescribeExternalTableSettings> {}; + struct TExplainDataQuerySettings : public TOperationRequestSettings<TExplainDataQuerySettings> { FLUENT_SETTING_DEFAULT(bool, WithCollectFullDiagnostics, false); }; @@ -1778,6 +1789,12 @@ public: 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<TImpl> 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<TImpl> 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 25fdbcf54e..af68960e83 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<Ydb::Table::DescribeExternalDataSourceRequest>(settings); + request.set_path(path); + + auto promise = NewPromise<TDescribeExternalDataSourceResult>(); + + 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<Ydb::Table::V1::TableService, + Ydb::Table::DescribeExternalDataSourceRequest, + Ydb::Table::DescribeExternalDataSourceResponse>( + 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<Ydb::Table::DescribeExternalTableRequest>(settings); + request.set_path(path); + + auto promise = NewPromise<TDescribeExternalTableResult>(); + + 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<Ydb::Table::V1::TableService, + Ydb::Table::DescribeExternalTableRequest, + Ydb::Table::DescribeExternalTableResponse>( + 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 002214d6da..2fb91a634f 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 @@ public: TFuture<TStatus> RenameTables(Ydb::Table::RenameTablesRequest&& request, const TRenameTablesSettings& settings); TFuture<TStatus> 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<typename TParamsType> 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 ec5191590e..4ebdbdd794 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<TImpl>(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<TImpl>(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 |