Skip to content

External data sources: describe in SDK #14483

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class ColumnFamily;
class CreateTableRequest;
class Changefeed;
class ChangefeedDescription;
class DescribeExternalDataSourceResult;
class DescribeExternalTableResult;
class DescribeTableResult;
class ExplicitPartitions;
class GlobalIndexSettings;
Expand Down Expand Up @@ -1068,11 +1070,16 @@ class TRenameItem {

////////////////////////////////////////////////////////////////////////////////

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>;
Expand Down Expand Up @@ -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);
};
Expand Down Expand Up @@ -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());

Expand Down Expand Up @@ -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
56 changes: 56 additions & 0 deletions ydb/public/sdk/cpp/src/client/table/impl/table_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
2 changes: 2 additions & 0 deletions ydb/public/sdk/cpp/src/client/table/impl/table_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class TTableClient::TImpl: public TClientImplCommon<TTableClient::TImpl>, 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,
Expand Down
76 changes: 76 additions & 0 deletions ydb/public/sdk/cpp/src/client/table/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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
Loading