aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorva-kuznecov <va-kuznecov@ydb.tech>2023-03-23 15:19:36 +0300
committerva-kuznecov <va-kuznecov@ydb.tech>2023-03-23 15:19:36 +0300
commitfe57112076455e1d5658f8d2f742c8b7465e98d3 (patch)
treedc86019d4d7f495f3db7a6c0c072da230fc12d8e
parente62f0606af1897a4152a75f3e4df5cf110d14930 (diff)
downloadydb-fe57112076455e1d5658f8d2f742c8b7465e98d3.tar.gz
Move ParseParameters into TQueryData
-rw-r--r--ydb/core/kqp/query_data/kqp_query_data.cpp22
-rw-r--r--ydb/core/kqp/query_data/kqp_query_data.h3
-rw-r--r--ydb/core/kqp/session_actor/kqp_session_actor.cpp38
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() {