diff options
author | va-kuznecov <va-kuznecov@ydb.tech> | 2023-03-23 15:19:36 +0300 |
---|---|---|
committer | va-kuznecov <va-kuznecov@ydb.tech> | 2023-03-23 15:19:36 +0300 |
commit | fe57112076455e1d5658f8d2f742c8b7465e98d3 (patch) | |
tree | dc86019d4d7f495f3db7a6c0c072da230fc12d8e | |
parent | e62f0606af1897a4152a75f3e4df5cf110d14930 (diff) | |
download | ydb-fe57112076455e1d5658f8d2f742c8b7465e98d3.tar.gz |
Move ParseParameters into TQueryData
-rw-r--r-- | ydb/core/kqp/query_data/kqp_query_data.cpp | 22 | ||||
-rw-r--r-- | ydb/core/kqp/query_data/kqp_query_data.h | 3 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_session_actor.cpp | 38 |
3 files changed, 31 insertions, 32 deletions
diff --git a/ydb/core/kqp/query_data/kqp_query_data.cpp b/ydb/core/kqp/query_data/kqp_query_data.cpp index 1bee2405ddb..925c7ac6f3f 100644 --- a/ydb/core/kqp/query_data/kqp_query_data.cpp +++ b/ydb/core/kqp/query_data/kqp_query_data.cpp @@ -215,6 +215,28 @@ void TQueryData::CreateKqpValueMap(const TKqpPhyTxHolder::TConstPtr& tx) { } } +void TQueryData::ParseParameters(const google::protobuf::Map<TBasicString<char>, Ydb::TypedValue>& params) { + for(const auto& [name, param] : params) { + auto success = AddTypedValueParam(name, param); + YQL_ENSURE(success, "Duplicate parameter: " << name); + } +} + +void TQueryData::ParseParameters(const NKikimrMiniKQL::TParams& parameters) { + if (!parameters.HasType()) { + return; + } + + YQL_ENSURE(parameters.GetType().GetKind() == NKikimrMiniKQL::Struct, "Expected struct as query parameters type"); + auto& structType = parameters.GetType().GetStruct(); + for (ui32 i = 0; i < structType.MemberSize(); ++i) { + const auto& memberName = structType.GetMember(i).GetName(); + YQL_ENSURE(i < parameters.GetValue().StructSize(), "Missing value for parameter: " << memberName); + auto success = AddMkqlParam(memberName, structType.GetMember(i).GetType(), parameters.GetValue().GetStruct(i)); + YQL_ENSURE(success, "Duplicate parameter: " << memberName); + } +} + bool TQueryData::AddUVParam(const TString& name, NKikimr::NMiniKQL::TType* type, const NUdf::TUnboxedValue& value) { auto g = TypeEnv().BindAllocator(); auto [_, success] = UnboxedData.emplace(name, std::make_pair(type, value)); diff --git a/ydb/core/kqp/query_data/kqp_query_data.h b/ydb/core/kqp/query_data/kqp_query_data.h index 4d41a4fedc9..05e4e669fd8 100644 --- a/ydb/core/kqp/query_data/kqp_query_data.h +++ b/ydb/core/kqp/query_data/kqp_query_data.h @@ -200,6 +200,9 @@ public: NMiniKQL::TTypeEnvironment& txTypeEnv); void CreateKqpValueMap(const TKqpPhyTxHolder::TConstPtr& tx); + void ParseParameters(const google::protobuf::Map<TBasicString<char>, Ydb::TypedValue>& params); + void ParseParameters(const NKikimrMiniKQL::TParams& parameters); + TTypedUnboxedValue GetTxResult(ui32 txIndex, ui32 resultIndex); NKikimrMiniKQL::TResult* GetMkqlTxResult(const NKqpProto::TKqpPhyResultBinding& rb, google::protobuf::Arena* arena); diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index 3b05f064d8a..40a7b86d894 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -692,39 +692,13 @@ public: YQL_ENSURE(false, "Unexpected query action: " << action); } - ParseParameters(QueryState->GetParameters()); - ParseParameters(QueryState->GetYdbParameters()); - return true; - } - - void ParseParameters(const google::protobuf::Map<TBasicString<char>, Ydb::TypedValue>& params) { - if (!params.size()){ - return; - } - - for(const auto& [name, param] : params) { - try { - auto success = QueryState->QueryData->AddTypedValueParam(name, param); - YQL_ENSURE(success, "Duplicate parameter: " << name); - } catch(const yexception& ex) { - ythrow TRequestFail(Ydb::StatusIds::BAD_REQUEST) << ex.what(); - } - } - } - - void ParseParameters(const NKikimrMiniKQL::TParams& parameters) { - if (!parameters.HasType()) { - return; - } - - YQL_ENSURE(parameters.GetType().GetKind() == NKikimrMiniKQL::Struct, "Expected struct as query parameters type"); - auto& structType = parameters.GetType().GetStruct(); - for (ui32 i = 0; i < structType.MemberSize(); ++i) { - const auto& memberName = structType.GetMember(i).GetName(); - YQL_ENSURE(i < parameters.GetValue().StructSize(), "Missing value for parameter: " << memberName); - auto success = QueryState->QueryData->AddMkqlParam(memberName, structType.GetMember(i).GetType(), parameters.GetValue().GetStruct(i)); - YQL_ENSURE(success, "Duplicate parameter: " << memberName); + try { + QueryState->QueryData->ParseParameters(QueryState->GetParameters()); + QueryState->QueryData->ParseParameters(QueryState->GetYdbParameters()); + } catch(const yexception& ex) { + ythrow TRequestFail(Ydb::StatusIds::BAD_REQUEST) << ex.what(); } + return true; } void ReplyPrepareResult() { |