aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Demin <deminds@ydb.tech>2025-02-13 00:08:07 +0300
committerGitHub <noreply@github.com>2025-02-12 21:08:07 +0000
commitb23b0fbcf514dcdbfac9ab6a96949bb3a9e1a836 (patch)
tree7724f33a9d970cbd3828f2909f5090c12e9b2971
parent377c8ea59ae2c1294ba35c979f2daca02004c32d (diff)
downloadydb-b23b0fbcf514dcdbfac9ab6a96949bb3a9e1a836.tar.gz
External data sources: describe in SDK (#14483)
-rw-r--r--ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h69
-rw-r--r--ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp56
-rw-r--r--ydb/public/sdk/cpp/src/client/table/impl/table_client.h2
-rw-r--r--ydb/public/sdk/cpp/src/client/table/table.cpp76
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