diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-02-02 15:23:37 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-02-02 15:23:37 +0300 |
commit | 8e4c944fccd17258a1d43f14f2d02f789f4906e2 (patch) | |
tree | 9529dfc19e9c3bc9d39ba4176c64af37b54a9671 | |
parent | 526605c8005b6d58f0dedf178129c57fd082811d (diff) | |
download | ydb-8e4c944fccd17258a1d43f14f2d02f789f4906e2.tar.gz |
fix column type usage
29 files changed, 212 insertions, 152 deletions
diff --git a/ydb/core/tx/tiering/rule/initializer.cpp b/ydb/core/tx/tiering/rule/initializer.cpp index b2f07c8ae4..96c1c3cff5 100644 --- a/ydb/core/tx/tiering/rule/initializer.cpp +++ b/ydb/core/tx/tiering/rule/initializer.cpp @@ -13,17 +13,17 @@ TVector<NKikimr::NMetadata::NInitializer::ITableModifier::TPtr> TTierRulesInitia { auto& column = *request.add_columns(); column.set_name("tieringRuleId"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name("defaultColumn"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name("description"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } result.emplace_back(new NMetadata::NInitializer::TGenericTableModifier<NMetadata::NRequest::TDialogCreateTable>(request, "create")); auto hRequest = TTieringRule::AddHistoryTableScheme(request); diff --git a/ydb/core/tx/tiering/rule/manager.cpp b/ydb/core/tx/tiering/rule/manager.cpp index aa16310215..7fd2a201ec 100644 --- a/ydb/core/tx/tiering/rule/manager.cpp +++ b/ydb/core/tx/tiering/rule/manager.cpp @@ -14,17 +14,17 @@ NMetadata::NModifications::TOperationParsingResult TTieringRulesManager::DoBuild const NYql::TObjectSettingsImpl& settings, const NMetadata::NModifications::IOperationsManager::TModificationContext& /*context*/) const { NMetadata::NInternal::TTableRecord result; - result.SetColumn(TTieringRule::TDecoder::TieringRuleId, NMetadata::NInternal::TYDBValue::Bytes(settings.GetObjectId())); + result.SetColumn(TTieringRule::TDecoder::TieringRuleId, NMetadata::NInternal::TYDBValue::Utf8(settings.GetObjectId())); { auto it = settings.GetFeatures().find(TTieringRule::TDecoder::DefaultColumn); if (it != settings.GetFeatures().end()) { - result.SetColumn(TTieringRule::TDecoder::DefaultColumn, NMetadata::NInternal::TYDBValue::Bytes(it->second)); + result.SetColumn(TTieringRule::TDecoder::DefaultColumn, NMetadata::NInternal::TYDBValue::Utf8(it->second)); } } { auto it = settings.GetFeatures().find(TTieringRule::TDecoder::Description); if (it != settings.GetFeatures().end()) { - result.SetColumn(TTieringRule::TDecoder::Description, NMetadata::NInternal::TYDBValue::Bytes(it->second)); + result.SetColumn(TTieringRule::TDecoder::Description, NMetadata::NInternal::TYDBValue::Utf8(it->second)); } } return result; diff --git a/ydb/core/tx/tiering/rule/object.cpp b/ydb/core/tx/tiering/rule/object.cpp index 0bd4fd00b5..12f5981d7b 100644 --- a/ydb/core/tx/tiering/rule/object.cpp +++ b/ydb/core/tx/tiering/rule/object.cpp @@ -43,13 +43,13 @@ bool TTieringRule::DeserializeDescriptionFromJson(const NJson::TJsonValue & json NMetadata::NInternal::TTableRecord TTieringRule::SerializeToRecord() const { NMetadata::NInternal::TTableRecord result; - result.SetColumn(TDecoder::TieringRuleId, NMetadata::NInternal::TYDBValue::Bytes(TieringRuleId)); - result.SetColumn(TDecoder::DefaultColumn, NMetadata::NInternal::TYDBValue::Bytes(DefaultColumn)); + result.SetColumn(TDecoder::TieringRuleId, NMetadata::NInternal::TYDBValue::Utf8(TieringRuleId)); + result.SetColumn(TDecoder::DefaultColumn, NMetadata::NInternal::TYDBValue::Utf8(DefaultColumn)); { auto jsonDescription = SerializeDescriptionToJson(); NJsonWriter::TBuf sout; sout.WriteJsonValue(&jsonDescription, true); - result.SetColumn(TDecoder::Description, NMetadata::NInternal::TYDBValue::Bytes(sout.Str())); + result.SetColumn(TDecoder::Description, NMetadata::NInternal::TYDBValue::Utf8(sout.Str())); } return result; } diff --git a/ydb/core/tx/tiering/tier/initializer.cpp b/ydb/core/tx/tiering/tier/initializer.cpp index cbd9599b0f..9bf517856a 100644 --- a/ydb/core/tx/tiering/tier/initializer.cpp +++ b/ydb/core/tx/tiering/tier/initializer.cpp @@ -13,12 +13,12 @@ TVector<NKikimr::NMetadata::NInitializer::ITableModifier::TPtr> TTiersInitialize { auto& column = *request.add_columns(); column.set_name("tierName"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name("tierConfig"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } result.emplace_back(new NMetadata::NInitializer::TGenericTableModifier<NMetadata::NRequest::TDialogCreateTable>(request, "create")); auto hRequest = TTierConfig::AddHistoryTableScheme(request); diff --git a/ydb/core/tx/tiering/tier/manager.cpp b/ydb/core/tx/tiering/tier/manager.cpp index ac7c494dc8..0366f1212a 100644 --- a/ydb/core/tx/tiering/tier/manager.cpp +++ b/ydb/core/tx/tiering/tier/manager.cpp @@ -9,7 +9,7 @@ NMetadata::NModifications::TOperationParsingResult TTiersManager::DoBuildPatchFr const NMetadata::NModifications::IOperationsManager::TModificationContext& context) const { NMetadata::NInternal::TTableRecord result; - result.SetColumn(TTierConfig::TDecoder::TierName, NMetadata::NInternal::TYDBValue::Bytes(settings.GetObjectId())); + result.SetColumn(TTierConfig::TDecoder::TierName, NMetadata::NInternal::TYDBValue::Utf8(settings.GetObjectId())); { auto it = settings.GetFeatures().find(TTierConfig::TDecoder::TierConfig); if (it != settings.GetFeatures().end()) { @@ -31,7 +31,7 @@ NMetadata::NModifications::TOperationParsingResult TTiersManager::DoBuildPatchFr return "SecretKey is incorrect"; } *proto.MutableObjectStorage()->MutableSecretKey() = secretKey->SerializeToString(); - result.SetColumn(TTierConfig::TDecoder::TierConfig, NMetadata::NInternal::TYDBValue::Bytes(proto.DebugString())); + result.SetColumn(TTierConfig::TDecoder::TierConfig, NMetadata::NInternal::TYDBValue::Utf8(proto.DebugString())); } } } diff --git a/ydb/core/tx/tiering/tier/object.cpp b/ydb/core/tx/tiering/tier/object.cpp index d886eb5194..ec9c93b8ce 100644 --- a/ydb/core/tx/tiering/tier/object.cpp +++ b/ydb/core/tx/tiering/tier/object.cpp @@ -39,8 +39,8 @@ bool TTierConfig::DeserializeFromRecord(const TDecoder& decoder, const Ydb::Valu NMetadata::NInternal::TTableRecord TTierConfig::SerializeToRecord() const { NMetadata::NInternal::TTableRecord result; - result.SetColumn(TDecoder::TierName, NMetadata::NInternal::TYDBValue::Bytes(TierName)); - result.SetColumn(TDecoder::TierConfig, NMetadata::NInternal::TYDBValue::Bytes(ProtoConfig.DebugString())); + result.SetColumn(TDecoder::TierName, NMetadata::NInternal::TYDBValue::Utf8(TierName)); + result.SetColumn(TDecoder::TierConfig, NMetadata::NInternal::TYDBValue::Utf8(ProtoConfig.DebugString())); return result; } diff --git a/ydb/core/tx/tiering/ut/ut_tiers.cpp b/ydb/core/tx/tiering/ut/ut_tiers.cpp index fa099d423f..1e66580131 100644 --- a/ydb/core/tx/tiering/ut/ut_tiers.cpp +++ b/ydb/core/tx/tiering/ut/ut_tiers.cpp @@ -295,13 +295,6 @@ Y_UNIT_TEST_SUITE(ColumnShardTiers) { } } { - std::vector<NMetadata::NInternal::TTableRecord> patches; - { - NMetadata::NInternal::TTableRecord patch; - patch.SetColumn("ownerPath", NMetadata::NInternal::TYDBValue::Bytes("/Root/olapStore")); - patch.SetColumn("tierName", NMetadata::NInternal::TYDBValue::Bytes("tier1")); - patches.emplace_back(std::move(patch)); - } emulator->ResetConditions(); emulator->SetExpectedTieringsCount(0); emulator->SetExpectedTiersCount(0); diff --git a/ydb/services/bg_tasks/abstract/task.cpp b/ydb/services/bg_tasks/abstract/task.cpp index 2fbe51fab0..860b95953d 100644 --- a/ydb/services/bg_tasks/abstract/task.cpp +++ b/ydb/services/bg_tasks/abstract/task.cpp @@ -2,4 +2,73 @@ namespace NKikimr::NBackgroundTasks { +bool TTask::DeserializeFromRecord(const TDecoder& decoder, const Ydb::Value& rawValue) { + if (!decoder.Read(decoder.GetIdIdx(), Id, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task id"; + return false; + } + if (!decoder.Read(decoder.GetClassIdx(), Class, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task class"; + return false; + } + if (!decoder.Read(decoder.GetEnabledIdx(), EnabledFlag, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task enabled"; + return false; + } + if (!decoder.Read(decoder.GetExecutorIdIdx(), ExecutorId, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task executor id"; + return false; + } + if (!decoder.Read(decoder.GetLastPingIdx(), LastPing, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task last ping"; + return false; + } + if (!decoder.Read(decoder.GetStartInstantIdx(), StartInstant, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task start instant"; + return false; + } + if (!decoder.Read(decoder.GetConstructInstantIdx(), ConstructInstant, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task construct instant"; + return false; + } + { + TString activityData; + if (!decoder.Read(decoder.GetActivityIdx(), activityData, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot read activity"; + return false; + } + if (!Activity.DeserializeFromString(activityData)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot deserialize activity"; + return false; + } + if (!Activity) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task activity"; + return false; + } + } + { + TString schedulerData; + if (!decoder.Read(decoder.GetSchedulerIdx(), schedulerData, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot read scheduler"; + return false; + } + if (!Scheduler.DeserializeFromString(schedulerData)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot deserialize scheduler"; + return false; + } + } + { + TString stateData; + if (!decoder.Read(decoder.GetStateIdx(), stateData, rawValue)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot read state"; + return false; + } + if (!State.DeserializeFromString(stateData)) { + ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot deserialize state"; + return false; + } + } + return true; +} + } diff --git a/ydb/services/bg_tasks/abstract/task.h b/ydb/services/bg_tasks/abstract/task.h index d866594f9f..e13eb90ddd 100644 --- a/ydb/services/bg_tasks/abstract/task.h +++ b/ydb/services/bg_tasks/abstract/task.h @@ -89,61 +89,7 @@ public: } }; - bool DeserializeFromRecord(const TDecoder& decoder, const Ydb::Value& rawValue) { - if (!decoder.Read(decoder.GetIdIdx(), Id, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetClassIdx(), Class, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetEnabledIdx(), EnabledFlag, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetExecutorIdIdx(), ExecutorId, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetLastPingIdx(), LastPing, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetStartInstantIdx(), StartInstant, rawValue)) { - return false; - } - if (!decoder.Read(decoder.GetConstructInstantIdx(), ConstructInstant, rawValue)) { - return false; - } - { - TString activityData; - if (!decoder.Read(decoder.GetActivityIdx(), activityData, rawValue)) { - return false; - } - if (!Activity.DeserializeFromString(activityData)) { - return false; - } - if (!Activity) { - ALS_ERROR(NKikimrServices::BG_TASKS) << "cannot parse task activity"; - return false; - } - } - { - TString schedulerData; - if (!decoder.Read(decoder.GetSchedulerIdx(), schedulerData, rawValue)) { - return false; - } - if (!Scheduler.DeserializeFromString(schedulerData)) { - return false; - } - } - { - TString stateData; - if (!decoder.Read(decoder.GetStateIdx(), stateData, rawValue)) { - return false; - } - if (!State.DeserializeFromString(stateData)) { - return false; - } - } - return true; - } + bool DeserializeFromRecord(const TDecoder& decoder, const Ydb::Value& rawValue); }; } diff --git a/ydb/services/bg_tasks/ds_table/add_tasks.cpp b/ydb/services/bg_tasks/ds_table/add_tasks.cpp index b4ceea8ef1..c39822887b 100644 --- a/ydb/services/bg_tasks/ds_table/add_tasks.cpp +++ b/ydb/services/bg_tasks/ds_table/add_tasks.cpp @@ -8,10 +8,10 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TAddTasksActor:: Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; sb << "DECLARE $activityString AS String;" << Endl; - sb << "DECLARE $taskId AS String;" << Endl; + sb << "DECLARE $taskId AS Utf8;" << Endl; sb << "DECLARE $schedulerString AS String;" << Endl; sb << "DECLARE $enabled AS Bool;" << Endl; - sb << "DECLARE $className AS String;" << Endl; + sb << "DECLARE $className AS Utf8;" << Endl; sb << "DECLARE $startInstant AS Uint32;" << Endl; sb << "DECLARE $constructInstant AS Uint32;" << Endl; sb << "UPSERT INTO `" + Controller->GetTableName() + "` (id, enabled, class, startInstant, constructInstant, activity, scheduler)" << Endl; @@ -49,13 +49,13 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TAddTasksActor:: { auto& param = (*request.mutable_parameters())["$className"]; - param.mutable_value()->set_bytes_value(Task.GetClass()); - param.mutable_type()->set_type_id(Ydb::Type::STRING); + param.mutable_value()->set_text_value(Task.GetClass()); + param.mutable_type()->set_type_id(Ydb::Type::UTF8); } auto& idString = (*request.mutable_parameters())["$taskId"]; - idString.mutable_value()->set_bytes_value(Task.GetId()); - idString.mutable_type()->set_type_id(Ydb::Type::STRING); + idString.mutable_value()->set_text_value(Task.GetId()); + idString.mutable_type()->set_type_id(Ydb::Type::UTF8); auto& aString = (*request.mutable_parameters())["$activityString"]; aString.mutable_value()->set_bytes_value(Task.GetActivity().SerializeToString()); diff --git a/ydb/services/bg_tasks/ds_table/assign_tasks.cpp b/ydb/services/bg_tasks/ds_table/assign_tasks.cpp index 4bff7f55e0..760a395607 100644 --- a/ydb/services/bg_tasks/ds_table/assign_tasks.cpp +++ b/ydb/services/bg_tasks/ds_table/assign_tasks.cpp @@ -6,7 +6,7 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TAssignTasksActo Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; const auto now = TActivationContext::Now(); - sb << "DECLARE $executorId AS String;" << Endl; + sb << "DECLARE $executorId AS Utf8;" << Endl; sb << "DECLARE $lastPingCriticalBorder AS Uint32;" << Endl; sb << "DECLARE $lastPingNewValue AS Uint32;" << Endl; sb << "$ids = (SELECT id FROM `" << Controller->GetTableName() << "`" @@ -28,8 +28,8 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TAssignTasksActo } { auto& param = (*request.mutable_parameters())["$executorId"]; - param.mutable_value()->set_bytes_value(ExecutorId); - param.mutable_type()->set_type_id(Ydb::Type::STRING); + param.mutable_value()->set_text_value(ExecutorId); + param.mutable_type()->set_type_id(Ydb::Type::UTF8); } request.mutable_query()->set_yql_text(sb); request.set_session_id(sessionId); diff --git a/ydb/services/bg_tasks/ds_table/fetch_tasks.cpp b/ydb/services/bg_tasks/ds_table/fetch_tasks.cpp index 2ed0b7c533..bc5efb5567 100644 --- a/ydb/services/bg_tasks/ds_table/fetch_tasks.cpp +++ b/ydb/services/bg_tasks/ds_table/fetch_tasks.cpp @@ -24,10 +24,10 @@ void TFetchTasksActor::OnResult(const NMetadata::NRequest::TDialogYQLRequest::TR std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TFetchTasksActor::OnSessionId(const TString& sessionId) { Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; - sb << "DECLARE $executorId AS String;" << Endl; + sb << "DECLARE $executorId AS Utf8;" << Endl; sb << "DECLARE $lastPingCriticalBorder AS Uint32;" << Endl; if (CurrentTaskIds.size()) { - sb << "DECLARE $taskIds AS List<String>;" << Endl; + sb << "DECLARE $taskIds AS List<Utf8>;" << Endl; } sb << "SELECT * FROM `" + Controller->GetTableName() + "`" << Endl; sb << "WHERE executorId = $executorId" << Endl; @@ -36,17 +36,17 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TFetchTasksActor if (CurrentTaskIds.size()) { sb << " AND id NOT IN $taskIds" << Endl; auto& idStrings = (*request.mutable_parameters())["$taskIds"]; - idStrings.mutable_type()->mutable_list_type(); + idStrings.mutable_type()->mutable_list_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); for (auto&& i : CurrentTaskIds) { auto* idString = idStrings.mutable_value()->add_items(); - idString->set_bytes_value(i); + idString->set_text_value(i); } } { auto& param = (*request.mutable_parameters())["$executorId"]; - param.mutable_value()->set_bytes_value(ExecutorId); - param.mutable_type()->set_type_id(Ydb::Type::STRING); + param.mutable_value()->set_text_value(ExecutorId); + param.mutable_type()->set_type_id(Ydb::Type::UTF8); } { auto& param = (*request.mutable_parameters())["$lastPingCriticalBorder"]; diff --git a/ydb/services/bg_tasks/ds_table/finish_task.cpp b/ydb/services/bg_tasks/ds_table/finish_task.cpp index b5dbed8204..5301971d83 100644 --- a/ydb/services/bg_tasks/ds_table/finish_task.cpp +++ b/ydb/services/bg_tasks/ds_table/finish_task.cpp @@ -5,13 +5,13 @@ namespace NKikimr::NBackgroundTasks { std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TDropTaskActor::OnSessionId(const TString& sessionId) { Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; - sb << "DECLARE $taskId AS String;" << Endl; + sb << "DECLARE $taskId AS Utf8;" << Endl; sb << "DELETE FROM `" + Controller->GetTableName() + "` ON SELECT $taskId AS id"; request.mutable_query()->set_yql_text(sb); auto& idString = (*request.mutable_parameters())["$taskId"]; - idString.mutable_value()->set_bytes_value(TaskId); - idString.mutable_type()->set_type_id(Ydb::Type::STRING); + idString.mutable_value()->set_text_value(TaskId); + idString.mutable_type()->set_type_id(Ydb::Type::UTF8); request.set_session_id(sessionId); request.mutable_tx_control()->mutable_begin_tx()->mutable_serializable_read_write(); diff --git a/ydb/services/bg_tasks/ds_table/initialization.cpp b/ydb/services/bg_tasks/ds_table/initialization.cpp index f0f1ea4566..87ddcf4706 100644 --- a/ydb/services/bg_tasks/ds_table/initialization.cpp +++ b/ydb/services/bg_tasks/ds_table/initialization.cpp @@ -14,7 +14,7 @@ void TBGTasksInitializer::DoPrepare(NMetadata::NInitializer::IInitializerInput:: { auto& column = *request.add_columns(); column.set_name("id"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); @@ -24,12 +24,12 @@ void TBGTasksInitializer::DoPrepare(NMetadata::NInitializer::IInitializerInput:: { auto& column = *request.add_columns(); column.set_name("class"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name("executorId"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); diff --git a/ydb/services/bg_tasks/ds_table/interrupt.cpp b/ydb/services/bg_tasks/ds_table/interrupt.cpp index 5c22e3872f..4caefd3133 100644 --- a/ydb/services/bg_tasks/ds_table/interrupt.cpp +++ b/ydb/services/bg_tasks/ds_table/interrupt.cpp @@ -5,7 +5,7 @@ namespace NKikimr::NBackgroundTasks { std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TInterruptTaskActor::OnSessionId(const TString& sessionId) { Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; - sb << "DECLARE $taskId AS String;" << Endl; + sb << "DECLARE $taskId AS Utf8;" << Endl; sb << "DECLARE $stateString AS String;" << Endl; sb << "DECLARE $startInstant AS Uint32;" << Endl; sb << "UPDATE `" + ExecutorController->GetTableName() + "`" << Endl; @@ -23,8 +23,8 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TInterruptTaskAc } auto& idString = (*request.mutable_parameters())["$taskId"]; - idString.mutable_value()->set_bytes_value(TaskId); - idString.mutable_type()->set_type_id(Ydb::Type::STRING); + idString.mutable_value()->set_text_value(TaskId); + idString.mutable_type()->set_type_id(Ydb::Type::UTF8); auto& sString = (*request.mutable_parameters())["$stateString"]; sString.mutable_value()->set_bytes_value(State.SerializeToString()); diff --git a/ydb/services/bg_tasks/ds_table/lock_pinger.cpp b/ydb/services/bg_tasks/ds_table/lock_pinger.cpp index 049f28e950..b517c4b666 100644 --- a/ydb/services/bg_tasks/ds_table/lock_pinger.cpp +++ b/ydb/services/bg_tasks/ds_table/lock_pinger.cpp @@ -8,7 +8,7 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TLockPingerActor Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; const auto now = TActivationContext::Now(); - sb << "DECLARE $taskIds AS List<String>;" << Endl; + sb << "DECLARE $taskIds AS List<Utf8>;" << Endl; sb << "DECLARE $lastPingNewValue AS Uint32;" << Endl; sb << "UPDATE `" + ExecutorController->GetTableName() + "`" << Endl; sb << "SET lastPing = $lastPingNewValue" << Endl; @@ -22,9 +22,9 @@ std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TLockPingerActor } auto& idStrings = (*request.mutable_parameters())["$taskIds"]; - idStrings.mutable_type()->mutable_list_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + idStrings.mutable_type()->mutable_list_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); for (auto&& i : TaskIds) { - idStrings.mutable_value()->add_items()->set_bytes_value(i); + idStrings.mutable_value()->add_items()->set_text_value(i); } request.set_session_id(sessionId); diff --git a/ydb/services/bg_tasks/ds_table/task_enabled.cpp b/ydb/services/bg_tasks/ds_table/task_enabled.cpp index 0be22d9954..e201935d74 100644 --- a/ydb/services/bg_tasks/ds_table/task_enabled.cpp +++ b/ydb/services/bg_tasks/ds_table/task_enabled.cpp @@ -7,15 +7,15 @@ namespace NKikimr::NBackgroundTasks { std::optional<NMetadata::NRequest::TDialogYQLRequest::TRequest> TUpdateTaskEnabledActor::OnSessionId(const TString& sessionId) { Ydb::Table::ExecuteDataQueryRequest request; TStringBuilder sb; - sb << "DECLARE $taskId AS String;" << Endl; + sb << "DECLARE $taskId AS Utf8;" << Endl; sb << "UPDATE `" + ExecutorController->GetTableName() + "`" << Endl; sb << "SET enabled = " << Enabled << Endl; sb << "WHERE id = $taskId" << Endl; request.mutable_query()->set_yql_text(sb); auto& idString = (*request.mutable_parameters())["$taskId"]; - idString.mutable_value()->set_bytes_value(TaskId); - idString.mutable_type()->set_type_id(Ydb::Type::STRING); + idString.mutable_value()->set_text_value(TaskId); + idString.mutable_type()->set_type_id(Ydb::Type::UTF8); request.set_session_id(sessionId); request.mutable_tx_control()->mutable_begin_tx()->mutable_serializable_read_write(); diff --git a/ydb/services/metadata/abstract/decoder.cpp b/ydb/services/metadata/abstract/decoder.cpp index 5b70d3ef05..f182f1487e 100644 --- a/ydb/services/metadata/abstract/decoder.cpp +++ b/ydb/services/metadata/abstract/decoder.cpp @@ -21,7 +21,14 @@ bool TDecoderBase::Read(const i32 columnIdx, TString& result, const Ydb::Value& if (columnIdx >= (i32)r.items().size() || columnIdx < 0) { return false; } - result = r.items()[columnIdx].bytes_value(); + if (r.items()[columnIdx].has_bytes_value()) { + result = r.items()[columnIdx].bytes_value(); + } else if (r.items()[columnIdx].has_text_value()) { + result = r.items()[columnIdx].text_value(); + } else { + // its normally for empty strings + result = ""; + } return true; } @@ -75,9 +82,17 @@ bool TDecoderBase::ReadJson(const i32 columnIdx, NJson::TJsonValue& result, cons if (columnIdx >= (i32)r.items().size() || columnIdx < 0) { return false; } - const TString& s = r.items()[columnIdx].bytes_value(); - if (!NJson::ReadJsonFastTree(s, &result)) { - ALS_ERROR(0) << "cannot parse json string: " << s; + const TString* jsonString = nullptr; + if (r.items()[columnIdx].has_bytes_value()) { + jsonString = &r.items()[columnIdx].bytes_value(); + } else if (r.items()[columnIdx].has_text_value()) { + jsonString = &r.items()[columnIdx].text_value(); + } else { + ALS_ERROR(0) << "no data for json string"; + return false; + } + if (!NJson::ReadJsonFastTree(*jsonString, &result)) { + ALS_ERROR(0) << "cannot parse json string: " << *jsonString; return false; } return true; @@ -87,9 +102,17 @@ bool TDecoderBase::ReadDebugProto(const i32 columnIdx, ::google::protobuf::Messa if (columnIdx >= (i32)r.items().size() || columnIdx < 0) { return false; } - const TString& s = r.items()[columnIdx].bytes_value(); - if (!::google::protobuf::TextFormat::ParseFromString(s, &result)) { - ALS_ERROR(0) << "cannot parse proto string: " << s; + const TString* jsonString = nullptr; + if (r.items()[columnIdx].has_bytes_value()) { + jsonString = &r.items()[columnIdx].bytes_value(); + } else if (r.items()[columnIdx].has_text_value()) { + jsonString = &r.items()[columnIdx].text_value(); + } else { + ALS_ERROR(0) << "no data for debug proto string"; + return false; + } + if (!::google::protobuf::TextFormat::ParseFromString(*jsonString, &result)) { + ALS_ERROR(0) << "cannot parse proto string: " << *jsonString; return false; } return true; diff --git a/ydb/services/metadata/initializer/behaviour.cpp b/ydb/services/metadata/initializer/behaviour.cpp index 3485476633..a53180040a 100644 --- a/ydb/services/metadata/initializer/behaviour.cpp +++ b/ydb/services/metadata/initializer/behaviour.cpp @@ -22,8 +22,8 @@ IInitializationBehaviour::TPtr TDBObjectBehaviour::ConstructInitializer() const std::shared_ptr<NKikimr::NMetadata::NModifications::IOperationsManager> TDBObjectBehaviour::ConstructOperationsManager() const { auto result = std::make_shared<TManager>(); NModifications::TTableSchema schema; - schema.AddColumn(true, NInternal::TYDBColumn::Bytes(TDBInitialization::TDecoder::ComponentId)); - schema.AddColumn(true, NInternal::TYDBColumn::Bytes(TDBInitialization::TDecoder::ModificationId)); + schema.AddColumn(true, NInternal::TYDBColumn::Utf8(TDBInitialization::TDecoder::ComponentId)); + schema.AddColumn(true, NInternal::TYDBColumn::Utf8(TDBInitialization::TDecoder::ModificationId)); schema.AddColumn(false, NInternal::TYDBColumn::UInt32(TDBInitialization::TDecoder::Instant)); result->SetActualSchema(schema); return result; diff --git a/ydb/services/metadata/initializer/initializer.cpp b/ydb/services/metadata/initializer/initializer.cpp index 26905a30e5..d8cd145659 100644 --- a/ydb/services/metadata/initializer/initializer.cpp +++ b/ydb/services/metadata/initializer/initializer.cpp @@ -13,12 +13,12 @@ void TInitializer::DoPrepare(IInitializerInput::TPtr controller) const { { auto& column = *request.add_columns(); column.set_name(TDBInitialization::TDecoder::ComponentId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name(TDBInitialization::TDecoder::ModificationId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); diff --git a/ydb/services/metadata/initializer/object.cpp b/ydb/services/metadata/initializer/object.cpp index dcc6c41728..966132ec8f 100644 --- a/ydb/services/metadata/initializer/object.cpp +++ b/ydb/services/metadata/initializer/object.cpp @@ -20,8 +20,8 @@ bool TDBInitialization::DeserializeFromRecord(const TDecoder& decoder, const Ydb NInternal::TTableRecord TDBInitialization::SerializeToRecord() const { NInternal::TTableRecord result; - result.SetColumn(TDecoder::ComponentId, NInternal::TYDBValue::Bytes(ComponentId)); - result.SetColumn(TDecoder::ModificationId, NInternal::TYDBValue::Bytes(ModificationId)); + result.SetColumn(TDecoder::ComponentId, NInternal::TYDBValue::Utf8(ComponentId)); + result.SetColumn(TDecoder::ModificationId, NInternal::TYDBValue::Utf8(ModificationId)); result.SetColumn(TDecoder::Instant, NInternal::TYDBValue::UInt32(Instant.Seconds())); return result; } diff --git a/ydb/services/metadata/manager/modification.h b/ydb/services/metadata/manager/modification.h index 795826390d..156b23b665 100644 --- a/ydb/services/metadata/manager/modification.h +++ b/ydb/services/metadata/manager/modification.h @@ -37,10 +37,10 @@ protected: return; } if (UserToken) { - Objects.AddColumn(NInternal::TYDBColumn::Bytes("historyUserId"), NInternal::TYDBValue::Bytes(UserToken->GetUserSID())); + Objects.AddColumn(NInternal::TYDBColumn::Utf8("historyUserId"), NInternal::TYDBValue::Utf8(UserToken->GetUserSID())); } Objects.AddColumn(NInternal::TYDBColumn::UInt64("historyInstant"), NInternal::TYDBValue::UInt64(TActivationContext::Now().MicroSeconds())); - Objects.AddColumn(NInternal::TYDBColumn::Bytes("historyAction"), NInternal::TYDBValue::Bytes(GetModifyType())); + Objects.AddColumn(NInternal::TYDBColumn::Utf8("historyAction"), NInternal::TYDBValue::Utf8(GetModifyType())); Ydb::Table::ExecuteDataQueryRequest request = Objects.BuildInsertQuery(TObject::GetBehaviour()->GetStorageHistoryTablePath()); request.set_session_id(SessionId); request.mutable_tx_control()->set_tx_id(TransactionId); diff --git a/ydb/services/metadata/manager/object.cpp b/ydb/services/metadata/manager/object.cpp index 34b1137550..9493df23e6 100644 --- a/ydb/services/metadata/manager/object.cpp +++ b/ydb/services/metadata/manager/object.cpp @@ -9,12 +9,12 @@ Ydb::Table::CreateTableRequest TBaseObject::AddHistoryTableScheme(const Ydb::Tab { auto& column = *result.add_columns(); column.set_name("historyAction"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *result.add_columns(); column.set_name("historyUserId"); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *result.add_columns(); diff --git a/ydb/services/metadata/manager/ydb_value_operator.cpp b/ydb/services/metadata/manager/ydb_value_operator.cpp index 13abd05f90..783c670616 100644 --- a/ydb/services/metadata/manager/ydb_value_operator.cpp +++ b/ydb/services/metadata/manager/ydb_value_operator.cpp @@ -78,24 +78,42 @@ Ydb::Value TYDBValue::NullValue() { return result; } -Ydb::Value TYDBValue::Bytes(const TString& value) { +Ydb::Value TYDBValue::RawBytes(const TString& value) { Ydb::Value result; result.set_bytes_value(value); return result; } -Ydb::Value TYDBValue::Bytes(const TStringBuf& value) { +Ydb::Value TYDBValue::RawBytes(const TStringBuf& value) { Ydb::Value result; result.set_bytes_value(TString(value.data(), value.size())); return result; } -Ydb::Value TYDBValue::Bytes(const char* value) { +Ydb::Value TYDBValue::RawBytes(const char* value) { Ydb::Value result; result.set_bytes_value(TString(value)); return result; } +Ydb::Value TYDBValue::Utf8(const TString& value) { + Ydb::Value result; + result.set_text_value(value); + return result; +} + +Ydb::Value TYDBValue::Utf8(const TStringBuf& value) { + Ydb::Value result; + result.set_text_value(TString(value.data(), value.size())); + return result; +} + +Ydb::Value TYDBValue::Utf8(const char* value) { + Ydb::Value result; + result.set_text_value(TString(value)); + return result; +} + Ydb::Value TYDBValue::UInt64(const ui64 value) { Ydb::Value result; result.set_uint64_value(value); @@ -108,13 +126,20 @@ Ydb::Value TYDBValue::UInt32(const ui32 value) { return result; } -Ydb::Column TYDBColumn::Bytes(const TString& columnId) { +Ydb::Column TYDBColumn::RawBytes(const TString& columnId) { Ydb::Column result; result.set_name(columnId); result.mutable_type()->set_type_id(Ydb::Type::STRING); return result; } +Ydb::Column TYDBColumn::Utf8(const TString& columnId) { + Ydb::Column result; + result.set_name(columnId); + result.mutable_type()->set_type_id(Ydb::Type::UTF8); + return result; +} + Ydb::Column TYDBColumn::Boolean(const TString& columnId) { Ydb::Column result; result.set_name(columnId); diff --git a/ydb/services/metadata/manager/ydb_value_operator.h b/ydb/services/metadata/manager/ydb_value_operator.h index 280c603fbb..624e93a782 100644 --- a/ydb/services/metadata/manager/ydb_value_operator.h +++ b/ydb/services/metadata/manager/ydb_value_operator.h @@ -6,7 +6,8 @@ namespace NKikimr::NMetadata::NInternal { class TYDBColumn { public: - static Ydb::Column Bytes(const TString& columnId); + static Ydb::Column RawBytes(const TString& columnId); + static Ydb::Column Utf8(const TString& columnId); static Ydb::Column Boolean(const TString& columnId); static Ydb::Column UInt64(const TString& columnId); static Ydb::Column UInt32(const TString& columnId); @@ -19,9 +20,12 @@ public: static bool Compare(const Ydb::Value& l, const Ydb::Value& r); static TString TypeToString(const Ydb::Type& type); static Ydb::Value NullValue(); - static Ydb::Value Bytes(const char* value); - static Ydb::Value Bytes(const TString& value); - static Ydb::Value Bytes(const TStringBuf& value); + static Ydb::Value RawBytes(const char* value); + static Ydb::Value RawBytes(const TString& value); + static Ydb::Value RawBytes(const TStringBuf& value); + static Ydb::Value Utf8(const char* value); + static Ydb::Value Utf8(const TString& value); + static Ydb::Value Utf8(const TStringBuf& value); static Ydb::Value UInt64(const ui64 value); static Ydb::Value UInt32(const ui32 value); }; diff --git a/ydb/services/metadata/secret/access.cpp b/ydb/services/metadata/secret/access.cpp index aae13342d0..dcf8b1221b 100644 --- a/ydb/services/metadata/secret/access.cpp +++ b/ydb/services/metadata/secret/access.cpp @@ -25,9 +25,9 @@ bool TAccess::DeserializeFromRecord(const TDecoder& decoder, const Ydb::Value& r NInternal::TTableRecord TAccess::SerializeToRecord() const { NInternal::TTableRecord result; - result.SetColumn(TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(OwnerUserId)); - result.SetColumn(TDecoder::SecretId, NInternal::TYDBValue::Bytes(SecretId)); - result.SetColumn(TDecoder::AccessSID, NInternal::TYDBValue::Bytes(AccessSID)); + result.SetColumn(TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(OwnerUserId)); + result.SetColumn(TDecoder::SecretId, NInternal::TYDBValue::Utf8(SecretId)); + result.SetColumn(TDecoder::AccessSID, NInternal::TYDBValue::Utf8(AccessSID)); return result; } diff --git a/ydb/services/metadata/secret/initializer.cpp b/ydb/services/metadata/secret/initializer.cpp index db36f1263f..045f83898d 100644 --- a/ydb/services/metadata/secret/initializer.cpp +++ b/ydb/services/metadata/secret/initializer.cpp @@ -15,17 +15,17 @@ void TSecretInitializer::DoPrepare(NInitializer::IInitializerInput::TPtr control { auto& column = *request.add_columns(); column.set_name(TSecret::TDecoder::OwnerUserId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name(TSecret::TDecoder::SecretId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name(TSecret::TDecoder::Value); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } result.emplace_back(new NInitializer::TGenericTableModifier<NRequest::TDialogCreateTable>(request, "create")); auto hRequest = TSecret::AddHistoryTableScheme(request); @@ -48,17 +48,17 @@ void TAccessInitializer::DoPrepare(NInitializer::IInitializerInput::TPtr control { auto& column = *request.add_columns(); column.set_name(TAccess::TDecoder::OwnerUserId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name(TAccess::TDecoder::SecretId); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } { auto& column = *request.add_columns(); column.set_name(TAccess::TDecoder::AccessSID); - column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::STRING); + column.mutable_type()->mutable_optional_type()->mutable_item()->set_type_id(Ydb::Type::UTF8); } result.emplace_back(new NInitializer::TGenericTableModifier<NRequest::TDialogCreateTable>(request, "create")); auto hRequest = TAccess::AddHistoryTableScheme(request); diff --git a/ydb/services/metadata/secret/manager.cpp b/ydb/services/metadata/secret/manager.cpp index 8642dee62c..a8f7494eff 100644 --- a/ydb/services/metadata/secret/manager.cpp +++ b/ydb/services/metadata/secret/manager.cpp @@ -29,17 +29,17 @@ NModifications::TOperationParsingResult TAccessManager::DoBuildPatchFromSettings if (!sb.TrySplit(':', l, r)) { return "incorrect objectId format (secretId:accessSID)"; } - result.SetColumn(TAccess::TDecoder::SecretId, NInternal::TYDBValue::Bytes(l)); - result.SetColumn(TAccess::TDecoder::AccessSID, NInternal::TYDBValue::Bytes(r)); + result.SetColumn(TAccess::TDecoder::SecretId, NInternal::TYDBValue::Utf8(l)); + result.SetColumn(TAccess::TDecoder::AccessSID, NInternal::TYDBValue::Utf8(r)); if (!context.GetUserToken()) { auto it = settings.GetFeatures().find(TAccess::TDecoder::OwnerUserId); if (it != settings.GetFeatures().end()) { - result.SetColumn(TAccess::TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(it->second)); + result.SetColumn(TAccess::TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(it->second)); } else { return "OwnerUserId not defined"; } } else { - result.SetColumn(TAccess::TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(context.GetUserToken()->GetUserSID())); + result.SetColumn(TAccess::TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(context.GetUserToken()->GetUserSID())); } return result; } @@ -49,12 +49,12 @@ NModifications::TOperationParsingResult TSecretManager::DoBuildPatchFromSettings if (!context.GetUserToken()) { auto it = settings.GetFeatures().find(TSecret::TDecoder::OwnerUserId); if (it != settings.GetFeatures().end()) { - result.SetColumn(TSecret::TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(it->second)); + result.SetColumn(TSecret::TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(it->second)); } else { return "OwnerUserId not defined"; } } else { - result.SetColumn(TSecret::TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(context.GetUserToken()->GetUserSID())); + result.SetColumn(TSecret::TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(context.GetUserToken()->GetUserSID())); } for (auto&& c : settings.GetObjectId()) { if (c >= '0' && c <= '9') { @@ -72,12 +72,12 @@ NModifications::TOperationParsingResult TSecretManager::DoBuildPatchFromSettings return "incorrect character for secret id: '" + TString(c) + "'"; } { - result.SetColumn(TSecret::TDecoder::SecretId, NInternal::TYDBValue::Bytes(settings.GetObjectId())); + result.SetColumn(TSecret::TDecoder::SecretId, NInternal::TYDBValue::Utf8(settings.GetObjectId())); } { auto it = settings.GetFeatures().find(TSecret::TDecoder::Value); if (it != settings.GetFeatures().end()) { - result.SetColumn(TSecret::TDecoder::Value, NInternal::TYDBValue::Bytes(it->second)); + result.SetColumn(TSecret::TDecoder::Value, NInternal::TYDBValue::Utf8(it->second)); } } return result; diff --git a/ydb/services/metadata/secret/secret.cpp b/ydb/services/metadata/secret/secret.cpp index 5e42f4e8e5..7cc57bcfc6 100644 --- a/ydb/services/metadata/secret/secret.cpp +++ b/ydb/services/metadata/secret/secret.cpp @@ -21,9 +21,9 @@ bool TSecret::DeserializeFromRecord(const TDecoder& decoder, const Ydb::Value& r NInternal::TTableRecord TSecret::SerializeToRecord() const { NInternal::TTableRecord result; - result.SetColumn(TDecoder::OwnerUserId, NInternal::TYDBValue::Bytes(OwnerUserId)); - result.SetColumn(TDecoder::SecretId, NInternal::TYDBValue::Bytes(SecretId)); - result.SetColumn(TDecoder::Value, NInternal::TYDBValue::Bytes(Value)); + result.SetColumn(TDecoder::OwnerUserId, NInternal::TYDBValue::Utf8(OwnerUserId)); + result.SetColumn(TDecoder::SecretId, NInternal::TYDBValue::Utf8(SecretId)); + result.SetColumn(TDecoder::Value, NInternal::TYDBValue::Utf8(Value)); return result; } |