Skip to content

Commit 5b6226f

Browse files
jepett0Gazizonoki
authored andcommitted
Moved commit "Describe VIEW for YDB CLI" from ydb repo
1 parent 0ad31b8 commit 5b6226f

File tree

16 files changed

+377
-79
lines changed

16 files changed

+377
-79
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#pragma once
2+
3+
#include <ydb-cpp-sdk/client/driver/driver.h>
4+
#include <ydb-cpp-sdk/client/scheme/scheme.h>
5+
6+
namespace Ydb::View {
7+
class DescribeViewResult;
8+
}
9+
10+
namespace NYdb {
11+
class TProtoAccessor;
12+
}
13+
14+
namespace NYql {
15+
class TIssues;
16+
}
17+
18+
namespace NYdb::NView {
19+
20+
class TDescribeViewResult;
21+
using TAsyncDescribeViewResult = NThreading::TFuture<TDescribeViewResult>;
22+
23+
struct TDescribeViewSettings : public TOperationRequestSettings<TDescribeViewSettings> {
24+
using TSelf = TDescribeViewSettings;
25+
};
26+
27+
class TViewDescription {
28+
public:
29+
explicit TViewDescription(const Ydb::View::DescribeViewResult& desc);
30+
31+
const std::string& GetQueryText() const;
32+
33+
private:
34+
std::string QueryText_;
35+
};
36+
37+
class TDescribeViewResult : public NScheme::TDescribePathResult {
38+
friend class NYdb::TProtoAccessor;
39+
const Ydb::View::DescribeViewResult& GetProto() const;
40+
41+
public:
42+
TDescribeViewResult(TStatus&& status, Ydb::View::DescribeViewResult&& desc);
43+
TViewDescription GetViewDescription() const;
44+
45+
private:
46+
std::unique_ptr<Ydb::View::DescribeViewResult> Proto_;
47+
};
48+
49+
class TViewClient {
50+
class TImpl;
51+
52+
public:
53+
TViewClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());
54+
55+
TAsyncDescribeViewResult DescribeView(const std::string& path,
56+
const TDescribeViewSettings& settings = TDescribeViewSettings());
57+
58+
private:
59+
std::shared_ptr<TImpl> Impl_;
60+
};
61+
62+
} // namespace NYdb::NView

include/ydb-cpp-sdk/client/proto/accessor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <src/api/protos/draft/ydb_replication.pb.h>
4+
#include <src/api/protos/draft/ydb_view.pb.h>
45
#include <src/api/protos/ydb_coordination.pb.h>
56
#include <src/api/protos/ydb_export.pb.h>
67
#include <src/api/protos/ydb_import.pb.h>
@@ -10,6 +11,7 @@
1011
#include <src/api/protos/ydb_value.pb.h>
1112

1213
#include <ydb-cpp-sdk/client/draft/ydb_replication.h>
14+
#include <ydb-cpp-sdk/client/draft/ydb_view.h>
1315
#include <ydb-cpp-sdk/client/coordination/coordination.h>
1416
#include <ydb-cpp-sdk/client/export/export.h>
1517
#include <ydb-cpp-sdk/client/import/import.h>
@@ -46,6 +48,7 @@ class TProtoAccessor {
4648
static const Ydb::Monitoring::SelfCheckResult& GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult);
4749
static const Ydb::Coordination::DescribeNodeResult& GetProto(const NYdb::NCoordination::TNodeDescription &describeNodeResult);
4850
static const Ydb::Replication::DescribeReplicationResult& GetProto(const NYdb::NReplication::TDescribeReplicationResult& desc);
51+
static const Ydb::View::DescribeViewResult& GetProto(const NYdb::NView::TDescribeViewResult& desc);
4952

5053
static NTable::TQueryStats FromProto(const Ydb::TableStats::QueryStats& queryStats);
5154
static NTable::TTableDescription FromProto(const Ydb::Table::CreateTableRequest& request);

src/api/grpc/draft/ydb_view_v1.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
syntax = "proto3";
2+
3+
package Ydb.View.V1;
4+
option java_package = "com.yandex.ydb.view.v1";
5+
6+
import "src/api/protos/draft/ydb_view.proto";
7+
8+
service ViewService {
9+
rpc DescribeView(View.DescribeViewRequest) returns (View.DescribeViewResponse);
10+
}

src/api/protos/draft/ydb_view.proto

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
syntax = "proto3";
2+
option cc_enable_arenas = true;
3+
4+
package Ydb.View;
5+
option java_package = "com.yandex.ydb.view";
6+
7+
import "src/api/protos/annotations/validation.proto";
8+
import "src/api/protos/ydb_operation.proto";
9+
import "src/api/protos/ydb_scheme.proto";
10+
11+
message DescribeViewRequest {
12+
Ydb.Operations.OperationParams operation_params = 1;
13+
// The path to the view.
14+
string path = 2 [(required) = true];
15+
}
16+
17+
message DescribeViewResponse {
18+
// The result of the request will be inside the operation proto.
19+
Ydb.Operations.Operation operation = 1;
20+
}
21+
22+
message DescribeViewResult {
23+
// Description of a generic scheme object.
24+
Ydb.Scheme.Entry self = 1;
25+
26+
// View-specific fields.
27+
string query_text = 2;
28+
}

src/client/draft/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ target_sources(client-draft PRIVATE
1313
ydb_dynamic_config.cpp
1414
ydb_replication.cpp
1515
ydb_scripting.cpp
16+
ydb_view.cpp
1617
)
1718

1819
generate_enum_serilization(client-draft

src/client/draft/ydb_view.cpp

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#include <ydb-cpp-sdk/client/draft/ydb_view.h>
2+
3+
#define INCLUDE_YDB_INTERNAL_H
4+
#include <src/client/impl/ydb_internal/make_request/make.h>
5+
#undef INCLUDE_YDB_INTERNAL_H
6+
7+
#include <src/api/grpc/draft/ydb_view_v1.grpc.pb.h>
8+
#include <src/api/protos/draft/ydb_view.pb.h>
9+
#include <src/client/common_client/impl/client.h>
10+
#include <ydb-cpp-sdk/client/proto/accessor.h>
11+
12+
namespace NYdb {
13+
namespace NView {
14+
15+
TViewDescription::TViewDescription(const Ydb::View::DescribeViewResult& desc)
16+
: QueryText_(desc.query_text())
17+
{
18+
}
19+
20+
const std::string& TViewDescription::GetQueryText() const {
21+
return QueryText_;
22+
}
23+
24+
TDescribeViewResult::TDescribeViewResult(TStatus&& status, Ydb::View::DescribeViewResult&& desc)
25+
: NScheme::TDescribePathResult(std::move(status), desc.self())
26+
, Proto_(std::make_unique<Ydb::View::DescribeViewResult>(std::move(desc)))
27+
{
28+
}
29+
30+
TViewDescription TDescribeViewResult::GetViewDescription() const {
31+
return TViewDescription(*Proto_);
32+
}
33+
34+
const Ydb::View::DescribeViewResult& TDescribeViewResult::GetProto() const {
35+
return *Proto_;
36+
}
37+
38+
class TViewClient::TImpl : public TClientImplCommon<TViewClient::TImpl> {
39+
public:
40+
TImpl(std::shared_ptr<TGRpcConnectionsImpl>&& connections, const TCommonClientSettings& settings)
41+
: TClientImplCommon(std::move(connections), settings)
42+
{
43+
}
44+
45+
TAsyncDescribeViewResult DescribeView(const std::string& path, const TDescribeViewSettings& settings) {
46+
using namespace Ydb::View;
47+
48+
auto request = MakeOperationRequest<DescribeViewRequest>(settings);
49+
request.set_path(TStringType{path});
50+
51+
auto promise = NThreading::NewPromise<TDescribeViewResult>();
52+
53+
auto extractor = [promise]
54+
(google::protobuf::Any* any, TPlainStatus status) mutable {
55+
DescribeViewResult result;
56+
if (any) {
57+
any->UnpackTo(&result);
58+
}
59+
60+
TDescribeViewResult val(TStatus(std::move(status)), std::move(result));
61+
promise.SetValue(std::move(val));
62+
};
63+
64+
Connections_->RunDeferred<V1::ViewService, DescribeViewRequest, DescribeViewResponse>(
65+
std::move(request),
66+
extractor,
67+
&V1::ViewService::Stub::AsyncDescribeView,
68+
DbDriverState_,
69+
INITIAL_DEFERRED_CALL_DELAY,
70+
TRpcRequestSettings::Make(settings));
71+
72+
return promise.GetFuture();
73+
}
74+
75+
};
76+
77+
TViewClient::TViewClient(const TDriver& driver, const TCommonClientSettings& settings)
78+
: Impl_(std::make_shared<TImpl>(CreateInternalInterface(driver), settings))
79+
{
80+
}
81+
82+
TAsyncDescribeViewResult TViewClient::DescribeView(const std::string& path, const TDescribeViewSettings& settings) {
83+
return Impl_->DescribeView(path, settings);
84+
}
85+
86+
} // NView
87+
88+
const Ydb::View::DescribeViewResult& TProtoAccessor::GetProto(const NView::TDescribeViewResult& result) {
89+
return result.GetProto();
90+
}
91+
92+
} // NYdb

tests/unit/client/CMakeLists.txt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
add_subdirectory(draft/helpers)
2+
13
add_ydb_test(NAME client-ydb_coordination_ut
24
SOURCES
35
coordination/coordination_ut.cpp
@@ -22,6 +24,22 @@ add_ydb_test(NAME client-extensions-discovery_mutator_ut
2224
unit
2325
)
2426

27+
add_ydb_test(NAME client-draft_ut
28+
SOURCES
29+
draft/ydb_scripting_response_headers_ut.cpp
30+
draft/ydb_view_ut.cpp
31+
LINK_LIBRARIES
32+
yutil
33+
cpp-testing-unittest_main
34+
YDB-CPP-SDK::Draft
35+
LABELS
36+
unit
37+
)
38+
target_link_libraries(client-draft_ut
39+
PRIVATE
40+
client-draft_ut_helpers
41+
)
42+
2543
add_ydb_test(NAME client-ydb_driver_ut
2644
SOURCES
2745
driver/driver_ut.cpp
@@ -99,14 +117,3 @@ add_ydb_test(NAME client-ydb_value_ut
99117
LABELS
100118
unit
101119
)
102-
103-
add_ydb_test(NAME client-draft_ut
104-
SOURCES
105-
scripting/ydb_scripting_response_headers_ut.cpp
106-
LINK_LIBRARIES
107-
yutil
108-
cpp-testing-unittest_main
109-
YDB-CPP-SDK::Draft
110-
LABELS
111-
unit
112-
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
_ydb_sdk_add_library(client-draft_ut_helpers)
2+
3+
target_link_libraries(client-draft_ut_helpers
4+
PRIVATE
5+
api-grpc
6+
api-grpc-draft
7+
)
8+
9+
target_sources(client-draft_ut_helpers
10+
PRIVATE
11+
grpc_services/scripting.cpp
12+
grpc_services/view.cpp
13+
)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include <grpcpp/server.h>
4+
#include <grpcpp/server_builder.h>
5+
6+
#include <ydb-cpp-sdk/type_switcher.h>
7+
8+
namespace NYdb {
9+
10+
template<class TService>
11+
std::unique_ptr<grpc::Server> StartGrpcServer(const std::string& address, TService& service) {
12+
grpc::ServerBuilder builder;
13+
builder.AddListeningPort(TStringType{address}, grpc::InsecureServerCredentials());
14+
builder.RegisterService(&service);
15+
return builder.BuildAndStart();
16+
}
17+
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "scripting.h"
2+
3+
namespace NYdb::NScripting {
4+
5+
grpc::Status TMockSlyDbProxy::ExecuteYql(
6+
grpc::ServerContext* context,
7+
[[maybe_unused]] const Ydb::Scripting::ExecuteYqlRequest* request,
8+
Ydb::Scripting::ExecuteYqlResponse* response
9+
) {
10+
context->AddInitialMetadata("key", "value");
11+
12+
// Just to make sdk core happy
13+
auto* op = response->mutable_operation();
14+
op->set_ready(true);
15+
op->set_status(Ydb::StatusIds::SUCCESS);
16+
op->mutable_result();
17+
18+
return grpc::Status::OK;
19+
}
20+
21+
}

0 commit comments

Comments
 (0)