diff --git a/include/ydb-cpp-sdk/client/types/status/status.h b/include/ydb-cpp-sdk/client/types/status/status.h index dd20f8964a..d95feeb51a 100644 --- a/include/ydb-cpp-sdk/client/types/status/status.h +++ b/include/ydb-cpp-sdk/client/types/status/status.h @@ -28,7 +28,6 @@ class TStatus { void Out(IOutputStream& out) const; friend IOutputStream& operator<<(IOutputStream& out, const TStatus& st); - friend std::ostream& operator<<(std::ostream& out, const TStatus& st); protected: void CheckStatusOk(const std::string& str) const; diff --git a/src/api/grpc/ydb_bsconfig_v1.proto b/src/api/grpc/ydb_bsconfig_v1.proto new file mode 100644 index 0000000000..78ee9f0203 --- /dev/null +++ b/src/api/grpc/ydb_bsconfig_v1.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +package Ydb.BSConfig.V1; + +option java_package = "com.yandex.ydb.bsconfig.v1"; +option java_outer_classname = "BSConfigGrpc"; +option java_multiple_files = true; + +import "src/api/protos/ydb_bsconfig.proto"; + +service BSConfigService { + + // Initialize Blobstorage host configs and box + rpc ReplaceStorageConfig(BSConfig.ReplaceStorageConfigRequest) returns (BSConfig.ReplaceStorageConfigResponse); + + // Fetch Blobstorage host configs and box + rpc FetchStorageConfig(BSConfig.FetchStorageConfigRequest) returns (BSConfig.FetchStorageConfigResponse); + +} \ No newline at end of file diff --git a/src/api/protos/ydb_bsconfig.proto b/src/api/protos/ydb_bsconfig.proto new file mode 100644 index 0000000000..2819b9e300 --- /dev/null +++ b/src/api/protos/ydb_bsconfig.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +option cc_enable_arenas = true; + +package Ydb.BSConfig; + +option java_package = "com.yandex.ydb.bsconfig.proto"; +option java_outer_classname = "BSConfigProtos"; +option java_multiple_files = true; + +import "src/api/protos/ydb_operation.proto"; + +// +// BSConfig API. +// + +message ReplaceStorageConfigRequest { + Ydb.Operations.OperationParams operation_params = 1; + string yaml_config = 2; +} + +message ReplaceStorageConfigResponse { + Ydb.Operations.Operation operation = 1; +} + +message ReplaceStorageConfigResult { +} + +message FetchStorageConfigRequest { + Ydb.Operations.OperationParams operation_params = 1; +} + +message FetchStorageConfigResponse { + Ydb.Operations.Operation operation = 1; +} + +message FetchStorageConfigResult { + string yaml_config = 1; +} \ No newline at end of file diff --git a/src/api/protos/ydb_issue_message.proto b/src/api/protos/ydb_issue_message.proto index 1c294d7c59..71fcdc579d 100644 --- a/src/api/protos/ydb_issue_message.proto +++ b/src/api/protos/ydb_issue_message.proto @@ -4,7 +4,7 @@ option cc_enable_arenas = true; package Ydb.Issue; option java_package = "com.yandex.ydb"; -// IssueMessage is a transport format for ydb/library/yql/public/issue library +// IssueMessage is a transport format for yql/essentials/public/issue library message IssueMessage { message Position { uint32 row = 1; @@ -16,7 +16,7 @@ message IssueMessage { string message = 2; Position end_position = 3; uint32 issue_code = 4; - // Severity values from ydb/library/yql/public/issue/protos/issue_severity.proto + // Severity values from yql/essentials/public/issue/protos/issue_severity.proto // FATAL = 0; // ERROR = 1; // WARNING = 2; diff --git a/src/client/persqueue_public/ut/ut_utils/sdk_test_setup.h b/src/client/persqueue_public/ut/ut_utils/sdk_test_setup.h index cc39afff38..3827827504 100644 --- a/src/client/persqueue_public/ut/ut_utils/sdk_test_setup.h +++ b/src/client/persqueue_public/ut/ut_utils/sdk_test_setup.h @@ -130,7 +130,7 @@ class SDKTestSetup { void SetNetDataViaFile(const TString& netDataTsv) { NetDataFile = MakeHolder(); - NetDataFile->Write(netDataTsv.Data(), netDataTsv.Size()); + NetDataFile->Write(netDataTsv.data(), netDataTsv.size()); NetDataFile->FlushData(); Server.ServerSettings.NetClassifierConfig.SetNetDataFilePath(NetDataFile->Name()); } diff --git a/src/client/persqueue_public/ut/ut_utils/test_server.h b/src/client/persqueue_public/ut/ut_utils/test_server.h index bd4790d978..80abcba47f 100644 --- a/src/client/persqueue_public/ut/ut_utils/test_server.h +++ b/src/client/persqueue_public/ut/ut_utils/test_server.h @@ -100,7 +100,7 @@ class TTestServer { if (NetDataFile) return false; NetDataFile = MakeHolder(); - NetDataFile->Write(content.Data(), content.Size()); + NetDataFile->Write(content.data(), content.size()); NetDataFile->FlushData(); ServerSettings.NetClassifierConfig.SetNetDataFilePath(NetDataFile->Name()); return true; diff --git a/src/client/persqueue_public/ut/ut_utils/ut_utils.h b/src/client/persqueue_public/ut/ut_utils/ut_utils.h index f61a2857be..a68664bdcd 100644 --- a/src/client/persqueue_public/ut/ut_utils/ut_utils.h +++ b/src/client/persqueue_public/ut/ut_utils/ut_utils.h @@ -436,7 +436,7 @@ struct TYdbPqWriterTestHelper { auto log = Setup->GetLog(); log << TLOG_INFO << "Enqueue message with sequence number " << SeqNo; EventLoop->MessageBuffer.Enqueue(::NPersQueue::TAcknowledgableMessage{ - message.Empty() ? Message : message, + message.empty() ? Message : message, SeqNo, TInstant::Now(), promise }); MessagesWrittenToBuffer.Signal(); diff --git a/src/client/value/value.cpp b/src/client/value/value.cpp index a54a913969..7c3665cb28 100644 --- a/src/client/value/value.cpp +++ b/src/client/value/value.cpp @@ -1019,7 +1019,7 @@ TUuidValue::TUuidValue(const Ydb::Value& valueProto) { TUuidValue::TUuidValue(const std::string& uuidString) { ui16 dw[8]; - if (!NKikimr::NUuid::ParseUuidToArray(uuidString, dw, false)) { + if (!NUuid::ParseUuidToArray(uuidString, dw, false)) { ThrowFatalError(TStringBuilder() << "Unable to parse string as uuid"); } static_assert(sizeof(dw) == sizeof(Buf_.Bytes)); @@ -1032,7 +1032,7 @@ std::string TUuidValue::ToString() const { ui16 dw[8]; static_assert(sizeof(dw) == sizeof(Buf_.Bytes)); std::memcpy(dw, Buf_.Bytes, sizeof(dw)); - NKikimr::NUuid::UuidToString(dw, s); + NUuid::UuidToString(dw, s); return s.Str(); } diff --git a/src/library/uuid/uuid.cpp b/src/library/uuid/uuid.cpp index a6a3cda99b..af69eee648 100644 --- a/src/library/uuid/uuid.cpp +++ b/src/library/uuid/uuid.cpp @@ -2,7 +2,7 @@ #include -namespace NKikimr { +namespace NYdb { namespace NUuid { static void WriteHexDigit(ui8 digit, IOutputStream& out) { diff --git a/src/library/uuid/uuid.h b/src/library/uuid/uuid.h index c8eb53205f..f1b23dfcc8 100644 --- a/src/library/uuid/uuid.h +++ b/src/library/uuid/uuid.h @@ -8,7 +8,7 @@ class IOutputStream; -namespace NKikimr { +namespace NYdb { namespace NUuid { static constexpr ui32 UUID_LEN = 16; diff --git a/tests/integration/basic_example_it/CMakeLists.txt b/tests/integration/basic_example_it/CMakeLists.txt index ba948934d2..b884f9560a 100644 --- a/tests/integration/basic_example_it/CMakeLists.txt +++ b/tests/integration/basic_example_it/CMakeLists.txt @@ -3,12 +3,13 @@ add_ydb_test(NAME basic-example_it main.cpp basic_example_data.cpp basic_example.cpp - basic_example.h LINK_LIBRARIES yutil + api-protos + YDB-CPP-SDK::Driver + YDB-CPP-SDK::Proto YDB-CPP-SDK::Table GTest::gtest_main - public-lib-json_value LABELS integration ) diff --git a/tests/integration/basic_example_it/basic_example.cpp b/tests/integration/basic_example_it/basic_example.cpp index f1a857b692..c8a2eb8b88 100644 --- a/tests/integration/basic_example_it/basic_example.cpp +++ b/tests/integration/basic_example_it/basic_example.cpp @@ -1,14 +1,13 @@ #include "basic_example.h" -#include +#include #include #include -using namespace NYdb; using namespace NYdb::NTable; -void ThrowOnError(const TStatus& status) { +void ThrowOnError(const NYdb::TStatus& status) { if (!status.IsSuccess()) { throw TYdbErrorException(status) << status; } @@ -26,16 +25,15 @@ static std::string JoinPath(const std::string& basePath, const std::string& path } TRunArgs GetRunArgs() { - std::string database = std::getenv("YDB_DATABASE"); std::string endpoint = std::getenv("YDB_ENDPOINT"); - auto driverConfig = TDriverConfig() + auto driverConfig = NYdb::TDriverConfig() .SetEndpoint(endpoint) .SetDatabase(database) .SetAuthToken(std::getenv("YDB_TOKEN") ? std::getenv("YDB_TOKEN") : ""); - TDriver driver(driverConfig); + NYdb::TDriver driver(driverConfig); return {driver, JoinPath(database, "basic")}; } @@ -45,10 +43,10 @@ TRunArgs GetRunArgs() { void CreateTables(TTableClient client, const std::string& path) { ThrowOnError(client.RetryOperationSync([path](TSession session) { auto seriesDesc = TTableBuilder() - .AddNullableColumn("series_id", EPrimitiveType::Uint64) - .AddNullableColumn("title", EPrimitiveType::Utf8) - .AddNullableColumn("series_info", EPrimitiveType::Utf8) - .AddNullableColumn("release_date", EPrimitiveType::Uint64) + .AddNullableColumn("series_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("title", NYdb::EPrimitiveType::Utf8) + .AddNullableColumn("series_info", NYdb::EPrimitiveType::Utf8) + .AddNullableColumn("release_date", NYdb::EPrimitiveType::Uint64) .SetPrimaryKeyColumn("series_id") .Build(); @@ -57,11 +55,11 @@ void CreateTables(TTableClient client, const std::string& path) { ThrowOnError(client.RetryOperationSync([path](TSession session) { auto seasonsDesc = TTableBuilder() - .AddNullableColumn("series_id", EPrimitiveType::Uint64) - .AddNullableColumn("season_id", EPrimitiveType::Uint64) - .AddNullableColumn("title", EPrimitiveType::Utf8) - .AddNullableColumn("first_aired", EPrimitiveType::Uint64) - .AddNullableColumn("last_aired", EPrimitiveType::Uint64) + .AddNullableColumn("series_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("season_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("title", NYdb::EPrimitiveType::Utf8) + .AddNullableColumn("first_aired", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("last_aired", NYdb::EPrimitiveType::Uint64) .SetPrimaryKeyColumns({"series_id", "season_id"}) .Build(); @@ -70,11 +68,11 @@ void CreateTables(TTableClient client, const std::string& path) { ThrowOnError(client.RetryOperationSync([path](TSession session) { auto episodesDesc = TTableBuilder() - .AddNullableColumn("series_id", EPrimitiveType::Uint64) - .AddNullableColumn("season_id", EPrimitiveType::Uint64) - .AddNullableColumn("episode_id", EPrimitiveType::Uint64) - .AddNullableColumn("title", EPrimitiveType::Utf8) - .AddNullableColumn("air_date", EPrimitiveType::Uint64) + .AddNullableColumn("series_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("season_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("episode_id", NYdb::EPrimitiveType::Uint64) + .AddNullableColumn("title", NYdb::EPrimitiveType::Utf8) + .AddNullableColumn("air_date", NYdb::EPrimitiveType::Uint64) .SetPrimaryKeyColumns({"series_id", "season_id", "episode_id"}) .Build(); @@ -86,7 +84,7 @@ void CreateTables(TTableClient client, const std::string& path) { /////////////////////////////////////////////////////////////////////////////// //! Fills sample tables with data in single parameterized data query. -TStatus FillTableDataTransaction(TSession session, const std::string& path) { +NYdb::TStatus FillTableDataTransaction(TSession session, const std::string& path) { auto query = std::format(R"( PRAGMA TablePathPrefix("{}"); @@ -146,8 +144,8 @@ TStatus FillTableDataTransaction(TSession session, const std::string& path) { } //! Shows basic usage of YDB data queries and transactions. -static TStatus SelectSimpleTransaction(TSession session, const std::string& path, - std::optional& resultSet) +static NYdb::TStatus SelectSimpleTransaction(TSession session, const std::string& path, + std::optional& resultSet) { auto query = std::format(R"( PRAGMA TablePathPrefix("{}"); @@ -176,7 +174,7 @@ static TStatus SelectSimpleTransaction(TSession session, const std::string& path } //! Shows basic usage of mutating operations. -static TStatus UpsertSimpleTransaction(TSession session, const std::string& path) { +static NYdb::TStatus UpsertSimpleTransaction(TSession session, const std::string& path) { auto query = std::format(R"( --!syntax_v1 PRAGMA TablePathPrefix("{}"); @@ -190,8 +188,8 @@ static TStatus UpsertSimpleTransaction(TSession session, const std::string& path } //! Shows usage of parameters in data queries. -static TStatus SelectWithParamsTransaction(TSession session, const std::string& path, - uint64_t seriesId, uint64_t seasonId, std::optional& resultSet) +static NYdb::TStatus SelectWithParamsTransaction(TSession session, const std::string& path, + uint64_t seriesId, uint64_t seasonId, std::optional& resultSet) { auto query = std::format(R"( --!syntax_v1 @@ -231,8 +229,8 @@ static TStatus SelectWithParamsTransaction(TSession session, const std::string& } //! Shows usage of prepared queries. -static TStatus PreparedSelectTransaction(TSession session, const std::string& path, - uint64_t seriesId, uint64_t seasonId, uint64_t episodeId, std::optional& resultSet) +static NYdb::TStatus PreparedSelectTransaction(TSession session, const std::string& path, + uint64_t seriesId, uint64_t seasonId, uint64_t episodeId, std::optional& resultSet) { // Once prepared, query data is stored in the session and identified by QueryId. // Local query cache is used to keep track of queries, prepared in current session. @@ -281,8 +279,8 @@ static TStatus PreparedSelectTransaction(TSession session, const std::string& pa } //! Shows usage of transactions consisting of multiple data queries with client logic between them. -static TStatus MultiStepTransaction(TSession session, const std::string& path, uint64_t seriesId, uint64_t seasonId, - std::optional& resultSet) +static NYdb::TStatus MultiStepTransaction(TSession session, const std::string& path, uint64_t seriesId, uint64_t seasonId, + std::optional& resultSet) { auto query1 = std::format(R"( --!syntax_v1 @@ -320,7 +318,7 @@ static TStatus MultiStepTransaction(TSession session, const std::string& path, u // Get active transaction id auto tx = result.GetTransaction(); - TResultSetParser parser(result.GetResultSet(0)); + NYdb::TResultSetParser parser(result.GetResultSet(0)); parser.TryNextRow(); auto date = parser.ColumnParser("from_date").GetOptionalUint64(); @@ -376,7 +374,7 @@ static TStatus MultiStepTransaction(TSession session, const std::string& path, u // Show usage of explicit Begin/Commit transaction control calls. // In most cases it's better to use transaction control settings in ExecuteDataQuery calls instead // to avoid additional hops to YDB cluster and allow more efficient execution of queries. -static TStatus ExplicitTclTransaction(TSession session, const std::string& path, const TInstant& airDate) { +static NYdb::TStatus ExplicitTclTransaction(TSession session, const std::string& path, const TInstant& airDate) { auto beginResult = session.BeginTransaction(TTxSettings::SerializableRW()).GetValueSync(); if (!beginResult.IsSuccess()) { return beginResult; @@ -414,7 +412,7 @@ static TStatus ExplicitTclTransaction(TSession session, const std::string& path, return tx.Commit().GetValueSync(); } -static TStatus ScanQuerySelect(TTableClient client, const std::string& path, std::vector & vectorResultSet) { +static NYdb::TStatus ScanQuerySelect(TTableClient client, const std::string& path, std::vector& vectorResultSet) { vectorResultSet.clear(); auto query = std::format(R"( --!syntax_v1 @@ -428,7 +426,7 @@ static TStatus ScanQuerySelect(TTableClient client, const std::string& path, std ORDER BY season_id; )", path); - auto parameters = TParamsBuilder() + auto parameters = NYdb::TParamsBuilder() .AddParam("$series") .BeginList() .AddListItem().Uint64(1) @@ -461,17 +459,18 @@ static TStatus ScanQuerySelect(TTableClient client, const std::string& path, std vectorResultSet.push_back(rs); } } - return TStatus(EStatus::SUCCESS, NYdb::NIssue::TIssues()); + return NYdb::TStatus(NYdb::EStatus::SUCCESS, NYdb::NIssue::TIssues()); } /////////////////////////////////////////////////////////////////////////////// -std::string SelectSimple(TTableClient client, const std::string& path) { - std::optional resultSet; +NYdb::TResultSet SelectSimple(TTableClient client, const std::string& path) { + std::optional resultSet; ThrowOnError(client.RetryOperationSync([path, &resultSet](TSession session) { return SelectSimpleTransaction(session, path, resultSet); })); - return FormatResultSetJson(resultSet.value(), EBinaryStringEncoding::Unicode); + + return resultSet.value(); } void UpsertSimple(TTableClient client, const std::string& path) { @@ -480,29 +479,31 @@ void UpsertSimple(TTableClient client, const std::string& path) { })); } -std::string SelectWithParams(TTableClient client, const std::string& path) { - std::optional resultSet; - std::string result; +NYdb::TResultSet SelectWithParams(TTableClient client, const std::string& path) { + std::optional resultSet; ThrowOnError(client.RetryOperationSync([path, &resultSet](TSession session) { return SelectWithParamsTransaction(session, path, 2, 3, resultSet); })); - return FormatResultSetJson(resultSet.value(), EBinaryStringEncoding::Unicode); + + return resultSet.value(); } -std::string PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId) { - std::optional resultSet; +NYdb::TResultSet PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId) { + std::optional resultSet; ThrowOnError(client.RetryOperationSync([path, seriesId, seasonId, episodeId, &resultSet](TSession session) { return PreparedSelectTransaction(session, path, seriesId, seasonId, episodeId, resultSet); })); - return FormatResultSetJson(resultSet.value(), EBinaryStringEncoding::Unicode); + + return resultSet.value(); } -std::string MultiStep(TTableClient client, const std::string& path) { - std::optional resultSet; +NYdb::TResultSet MultiStep(TTableClient client, const std::string& path) { + std::optional resultSet; ThrowOnError(client.RetryOperationSync([path, &resultSet](TSession session) { return MultiStepTransaction(session, path, 2, 5, resultSet); })); - return FormatResultSetJson(resultSet.value(), EBinaryStringEncoding::Unicode); + + return resultSet.value(); } void ExplicitTcl(TTableClient client, const std::string& path) { @@ -511,12 +512,11 @@ void ExplicitTcl(TTableClient client, const std::string& path) { })); } -std::vector ScanQuerySelect(TTableClient client, const std::string& path) { - std::vector vectorResultSet; - ThrowOnError(client.RetryOperationSync([path, &vectorResultSet](TTableClient& client) { - return ScanQuerySelect(client, path, vectorResultSet); +std::vector ScanQuerySelect(TTableClient client, const std::string& path) { + std::vector resultSets; + ThrowOnError(client.RetryOperationSync([path, &resultSets](TTableClient& client) { + return ScanQuerySelect(client, path, resultSets); })); - std::vector resultJson(vectorResultSet.size()); - std::transform(vectorResultSet.begin(), vectorResultSet.end(), resultJson.begin(), [](TResultSet& x){return FormatResultSetJson(x, EBinaryStringEncoding::Unicode);}); - return resultJson; + + return resultSets; } diff --git a/tests/integration/basic_example_it/basic_example.h b/tests/integration/basic_example_it/basic_example.h index 9328880d25..ca0e2b71c1 100644 --- a/tests/integration/basic_example_it/basic_example.h +++ b/tests/integration/basic_example_it/basic_example.h @@ -3,34 +3,35 @@ #include #include +#include + #include -using namespace NYdb; using namespace NYdb::NTable; struct TRunArgs { - TDriver driver; + NYdb::TDriver driver; std::string path; }; class TYdbErrorException : public yexception { public: - TYdbErrorException(const TStatus& status) + TYdbErrorException(const NYdb::TStatus& status) : Status(status) {} - TStatus Status; + NYdb::TStatus Status; }; NYdb::TParams GetTablesDataParams(); void CreateTables(TTableClient client, const std::string& path); -void ThrowOnError(const TStatus& status); +void ThrowOnError(const NYdb::TStatus& status); TRunArgs GetRunArgs(); -TStatus FillTableDataTransaction(TSession session, const std::string& path); -std::string SelectSimple(TTableClient client, const std::string& path); +NYdb::TStatus FillTableDataTransaction(TSession session, const std::string& path); +NYdb::TResultSet SelectSimple(TTableClient client, const std::string& path); void UpsertSimple(TTableClient client, const std::string& path); -std::string SelectWithParams(TTableClient client, const std::string& path); -std::string PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId); -std::string MultiStep(TTableClient client, const std::string& path); +NYdb::TResultSet SelectWithParams(TTableClient client, const std::string& path); +NYdb::TResultSet PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId); +NYdb::TResultSet MultiStep(TTableClient client, const std::string& path); void ExplicitTcl(TTableClient client, const std::string& path); -std::string PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId); -std::vector ScanQuerySelect(TTableClient client, const std::string& path); +NYdb::TResultSet PreparedSelect(TTableClient client, const std::string& path, ui32 seriesId, ui32 seasonId, ui32 episodeId); +std::vector ScanQuerySelect(TTableClient client, const std::string& path); diff --git a/tests/integration/basic_example_it/basic_example_data.cpp b/tests/integration/basic_example_it/basic_example_data.cpp index e27bf1528c..fd0693011b 100644 --- a/tests/integration/basic_example_it/basic_example_data.cpp +++ b/tests/integration/basic_example_it/basic_example_data.cpp @@ -1,8 +1,5 @@ #include "basic_example.h" -using namespace NYdb; -using namespace NYdb::NTable; - struct TSeries { ui64 SeriesId; std::string Title; @@ -46,7 +43,7 @@ struct TEpisode { , AirDate(airDate) {} }; -TParams GetTablesDataParams() { +NYdb::TParams GetTablesDataParams() { std::vector seriesData = { TSeries(1, "IT Crowd", TInstant::ParseIso8601("2006-02-03"), "The IT Crowd is a British sitcom produced by Channel 4, written by Graham Linehan, produced by " @@ -141,7 +138,7 @@ TParams GetTablesDataParams() { TEpisode(2, 5, 8, "Fifty-One Percent", TInstant::ParseIso8601("2018-05-13")) }; - TParamsBuilder paramsBuilder; + NYdb::TParamsBuilder paramsBuilder; auto& seriesParam = paramsBuilder.AddParam("$seriesData"); seriesParam.BeginList(); diff --git a/tests/integration/basic_example_it/main.cpp b/tests/integration/basic_example_it/main.cpp index 54bcfbf1c7..15417a6f45 100644 --- a/tests/integration/basic_example_it/main.cpp +++ b/tests/integration/basic_example_it/main.cpp @@ -1,63 +1,222 @@ #include "basic_example.h" -#include +#include -#include -#include -#include +#include + +#include + +#include + +static void ValidateResultSet(const std::vector& columns, + const std::vector>& values, + const NYdb::TResultSet& rs) { + Ydb::ResultSet protoResultSet; + for (const auto& column : columns) { + auto* protoColumn = protoResultSet.add_columns(); + protoColumn->set_name(column.Name); + *protoColumn->mutable_type() = column.Type.GetProto(); + } + + for (const auto& row : values) { + auto* protoRow = protoResultSet.add_rows(); + for (const auto& value : row) { + *protoRow->add_items() = value.GetProto(); + } + } + + NYdb::TStringType expected, result; + google::protobuf::TextFormat::PrintToString(protoResultSet, &expected); + google::protobuf::TextFormat::PrintToString(NYdb::TProtoAccessor::GetProto(rs), &result); + + ASSERT_EQ(expected, result); +} + + +static NYdb::TType MakeOptionalType(NYdb::EPrimitiveType type) { + return NYdb::TTypeBuilder().BeginOptional().Primitive(type).EndOptional().Build(); +} -#include TEST(Integration, BasicExample) { - auto [driver, path] = GetRunArgs(); - TTableClient client(driver); + NYdb::NTable::TTableClient client(driver); try { CreateTables(client, path); - ThrowOnError(client.RetryOperationSync([path](TSession session) { + ThrowOnError(client.RetryOperationSync([path](NYdb::NTable::TSession session) { return FillTableDataTransaction(session, path); })); - std::string expectedResultSelectSimple = "{\"series_id\":1,\"title\":\"IT Crowd\",\"release_date\":\"2006-02-03\"}\n"; - std::string resultSelectSimple = SelectSimple(client, path); - ASSERT_EQ(resultSelectSimple, expectedResultSelectSimple); - - UpsertSimple(client, path); + { + std::vector columns = { + {"series_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + {"release_date", MakeOptionalType(NYdb::EPrimitiveType::String)}, + }; - std::string expectedResultSelectWithParams = "{\"season_title\":\"Season 3\",\"series_title\":\"Silicon Valley\"}\n"; - std::string resultSelectWithParms = SelectWithParams(client, path); - ASSERT_EQ(resultSelectWithParms, expectedResultSelectWithParams); + std::vector> values = {{ + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Utf8("IT Crowd").Build(), + NYdb::TValueBuilder().String("2006-02-03").Build(), + }}; - std::string expectedResultPreparedSelect1 = "{\"air_date\":16957,\"episode_id\":7,\"season_id\":3,\"series_id\":2,\"title\":\"To Build a Better Beta\"}\n"; - std::string resultPreparedSelect1 = PreparedSelect(client, path, 2, 3, 7); - ASSERT_EQ(resultPreparedSelect1, expectedResultPreparedSelect1); + ValidateResultSet(columns, values, SelectSimple(client, path)); + } - std::string expectedResultPreparedSelect2 = "{\"air_date\":16964,\"episode_id\":8,\"season_id\":3,\"series_id\":2,\"title\":\"Bachman's Earnings Over-Ride\"}\n"; - std::string resultPreparedSelect2 = PreparedSelect(client, path, 2, 3, 8); - ASSERT_EQ(resultPreparedSelect2, expectedResultPreparedSelect2); + UpsertSimple(client, path); - std::string expectedResultMultiStep = "{\"season_id\":5,\"episode_id\":1,\"title\":\"Grow Fast or Die Slow\",\"air_date\":17615}\n{\"season_id\":5,\"episode_id\":2,\"title\":\"Reorientation\",\"air_date\":17622}\n{\"season_id\":5,\"episode_id\":3,\"title\":\"Chief Operating Officer\",\"air_date\":17629}\n"; - std::string resultMultiStep = MultiStep(client, path); - ASSERT_EQ(resultMultiStep, expectedResultMultiStep); + { + std::vector columns = { + {"season_title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + {"series_title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + }; + + std::vector> values = {{ + NYdb::TValueBuilder().Utf8("Season 3").Build(), + NYdb::TValueBuilder().Utf8("Silicon Valley").Build(), + }}; + + ValidateResultSet(columns, values, SelectWithParams(client, path)); + } + + { + std::vector columns = { + {"air_date", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"episode_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"season_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"series_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + }; + + std::vector> values = {{ + NYdb::TValueBuilder().Uint64(16957).Build(), + NYdb::TValueBuilder().Uint64(7).Build(), + NYdb::TValueBuilder().Uint64(3).Build(), + NYdb::TValueBuilder().Uint64(2).Build(), + NYdb::TValueBuilder().Utf8("To Build a Better Beta").Build(), + }}; + + ValidateResultSet(columns, values, PreparedSelect(client, path, 2, 3, 7)); + } + + { + std::vector columns = { + {"air_date", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"episode_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"season_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"series_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + }; + + std::vector> values = {{ + NYdb::TValueBuilder().Uint64(16964).Build(), + NYdb::TValueBuilder().Uint64(8).Build(), + NYdb::TValueBuilder().Uint64(3).Build(), + NYdb::TValueBuilder().Uint64(2).Build(), + NYdb::TValueBuilder().Utf8("Bachman's Earnings Over-Ride").Build(), + }}; + + ValidateResultSet(columns, values, PreparedSelect(client, path, 2, 3, 8)); + } + + { + std::vector columns = { + {"season_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"episode_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + {"air_date", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + }; + + std::vector> values = { + { + NYdb::TValueBuilder().Uint64(5).Build(), + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Utf8("Grow Fast or Die Slow").Build(), + NYdb::TValueBuilder().Uint64(17615).Build(), + }, + { + NYdb::TValueBuilder().Uint64(5).Build(), + NYdb::TValueBuilder().Uint64(2).Build(), + NYdb::TValueBuilder().Utf8("Reorientation").Build(), + NYdb::TValueBuilder().Uint64(17622).Build(), + }, + { + NYdb::TValueBuilder().Uint64(5).Build(), + NYdb::TValueBuilder().Uint64(3).Build(), + NYdb::TValueBuilder().Utf8("Chief Operating Officer").Build(), + NYdb::TValueBuilder().Uint64(17629).Build(), + }, + }; + + ValidateResultSet(columns, values, MultiStep(client, path)); + } ExplicitTcl(client, path); - std::string expectedResultPreparedSelect3 = "{\"air_date\":0,\"episode_id\":1,\"season_id\":6,\"series_id\":2,\"title\":\"TBD\"}\n"; - std::string resultPreparedSelect3 = PreparedSelect(client, path, 2, 6, 1); - ASSERT_EQ(resultPreparedSelect3, expectedResultPreparedSelect3); - - std::string expectedResultScanQuerySelect = "{\"series_id\":1,\"season_id\":1,\"title\":\"Season 1\",\"first_aired\":\"2006-02-03\"}\n{\"series_id\":1,\"season_id\":2,\"title\":\"Season 2\",\"first_aired\":\"2007-08-24\"}\n{\"series_id\":1,\"season_id\":3,\"title\":\"Season 3\",\"first_aired\":\"2008-11-21\"}\n{\"series_id\":1,\"season_id\":4,\"title\":\"Season 4\",\"first_aired\":\"2010-06-25\"}\n"; - std::vector resultScanQuerySelectVector = ScanQuerySelect(client, path); - std::string resultScanQuerySelect = std::reduce(resultScanQuerySelectVector.begin(), resultScanQuerySelectVector.end()); - ASSERT_EQ(resultScanQuerySelect, expectedResultScanQuerySelect); + { + std::vector columns = { + {"air_date", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"episode_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"season_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"series_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + }; + + std::vector> values = {{ + NYdb::TValueBuilder().Uint64(0).Build(), + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Uint64(6).Build(), + NYdb::TValueBuilder().Uint64(2).Build(), + NYdb::TValueBuilder().Utf8("TBD").Build(), + }}; + + ValidateResultSet(columns, values, PreparedSelect(client, path, 2, 6, 1)); + } + + { + std::vector columns = { + {"series_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"season_id", MakeOptionalType(NYdb::EPrimitiveType::Uint64)}, + {"title", MakeOptionalType(NYdb::EPrimitiveType::Utf8)}, + {"first_aired", MakeOptionalType(NYdb::EPrimitiveType::String)}, + }; + + std::vector> values = { + { + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Utf8("Season 1").Build(), + NYdb::TValueBuilder().String("2006-02-03").Build(), + }, + { + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Uint64(2).Build(), + NYdb::TValueBuilder().Utf8("Season 2").Build(), + NYdb::TValueBuilder().String("2007-08-24").Build(), + }, + { + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Uint64(3).Build(), + NYdb::TValueBuilder().Utf8("Season 3").Build(), + NYdb::TValueBuilder().String("2008-11-21").Build(), + }, + { + NYdb::TValueBuilder().Uint64(1).Build(), + NYdb::TValueBuilder().Uint64(4).Build(), + NYdb::TValueBuilder().Utf8("Season 4").Build(), + NYdb::TValueBuilder().String("2010-06-25").Build(), + }, + }; + + std::string expected = "{\"series_id\":1,\"season_id\":1,\"title\":\"Season 1\",\"first_aired\":\"2006-02-03\"}\n{\"series_id\":1,\"season_id\":2,\"title\":\"Season 2\",\"first_aired\":\"2007-08-24\"}\n{\"series_id\":1,\"season_id\":3,\"title\":\"Season 3\",\"first_aired\":\"2008-11-21\"}\n{\"series_id\":1,\"season_id\":4,\"title\":\"Season 4\",\"first_aired\":\"2010-06-25\"}\n"; + auto result = ScanQuerySelect(client, path); + ASSERT_EQ(result.size(), size_t(1)); + ValidateResultSet(columns, values, result[0]); + } + } catch (const TYdbErrorException& e) { + FAIL() << "Execution failed due to fatal error:\nStatus: " << ToString(e.Status) << std::endl; } - catch (const TYdbErrorException& e) { - driver.Stop(true); - FAIL() << "Execution failed due to fatal error:\nStatus: " << ToString(e.Status.GetStatus()) << std::endl << e.Status.GetIssues().ToString(); - } - - driver.Stop(true); } diff --git a/tests/integration/bulk_upsert_simple_it/CMakeLists.txt b/tests/integration/bulk_upsert_simple_it/CMakeLists.txt index 7166cf1ea0..bc7ffbb35b 100644 --- a/tests/integration/bulk_upsert_simple_it/CMakeLists.txt +++ b/tests/integration/bulk_upsert_simple_it/CMakeLists.txt @@ -6,7 +6,6 @@ add_ydb_test(NAME bulk_upsert_simple_it LINK_LIBRARIES yutil YDB-CPP-SDK::Table - getopt GTest::gtest_main LABELS integration diff --git a/tests/integration/bulk_upsert_simple_it/bulk_upsert.cpp b/tests/integration/bulk_upsert_simple_it/bulk_upsert.cpp index d0e104ace0..29956dd8b0 100644 --- a/tests/integration/bulk_upsert_simple_it/bulk_upsert.cpp +++ b/tests/integration/bulk_upsert_simple_it/bulk_upsert.cpp @@ -1,6 +1,7 @@ #include "bulk_upsert.h" #include +#include static constexpr size_t BATCH_SIZE = 1000; diff --git a/tests/integration/bulk_upsert_simple_it/bulk_upsert.h b/tests/integration/bulk_upsert_simple_it/bulk_upsert.h index 8e0be0b909..e450973a61 100644 --- a/tests/integration/bulk_upsert_simple_it/bulk_upsert.h +++ b/tests/integration/bulk_upsert_simple_it/bulk_upsert.h @@ -2,7 +2,6 @@ #include #include -#include using namespace NYdb; using namespace NYdb::NTable; diff --git a/tests/integration/bulk_upsert_simple_it/main.cpp b/tests/integration/bulk_upsert_simple_it/main.cpp index 5fc8862974..7193cb5b8e 100644 --- a/tests/integration/bulk_upsert_simple_it/main.cpp +++ b/tests/integration/bulk_upsert_simple_it/main.cpp @@ -2,6 +2,9 @@ #include +#include + + TEST(Integration, BulkUpsert) { uint32_t correctSumApp = 0; @@ -43,7 +46,7 @@ TEST(Integration, BulkUpsert) { EXPECT_EQ(sumHost, correctSumHost); } catch (const TYdbErrorException& e) { driver.Stop(true); - FAIL() << "Execution failed due to fatal error:\nStatus: " << ToString(e.Status.GetStatus()) << std::endl << e.Status.GetIssues().ToString(); + FAIL() << "Execution failed due to fatal error:\nStatus: " << ToString(e.Status) << std::endl << e.Status.GetIssues().ToString(); } DropTable(client, path);