diff options
author | dcherednik <dcherednik@ydb.tech> | 2023-06-22 17:46:56 +0300 |
---|---|---|
committer | dcherednik <dcherednik@ydb.tech> | 2023-06-22 17:46:56 +0300 |
commit | dc1cd35d4a42277a0f145a9d513d8c1a8fbd56e4 (patch) | |
tree | 3036ebd4148471773b5011e65462e9df94bfe4a8 | |
parent | 6d818f0d96fee2df1b7c7e31d12442a39f81f8eb (diff) | |
download | ydb-dc1cd35d4a42277a0f145a9d513d8c1a8fbd56e4.tar.gz |
Pass column meta to TQueryResponse proto for Explain queries.
-rw-r--r-- | ydb/core/kqp/host/CMakeLists.darwin-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/kqp/host/CMakeLists.linux-aarch64.txt | 1 | ||||
-rw-r--r-- | ydb/core/kqp/host/CMakeLists.linux-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/kqp/host/CMakeLists.windows-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/kqp/host/kqp_host.cpp | 21 | ||||
-rw-r--r-- | ydb/core/kqp/host/ya.make | 1 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_worker_actor.cpp | 18 |
7 files changed, 24 insertions, 20 deletions
diff --git a/ydb/core/kqp/host/CMakeLists.darwin-x86_64.txt b/ydb/core/kqp/host/CMakeLists.darwin-x86_64.txt index 35f11fc1934..620aebb8231 100644 --- a/ydb/core/kqp/host/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/kqp/host/CMakeLists.darwin-x86_64.txt @@ -19,7 +19,6 @@ target_link_libraries(core-kqp-host PUBLIC core-kqp-opt core-kqp-provider tx-long_tx_service-public - library-yql-ast yql-core-services minikql-invoke_builtins-llvm library-yql-sql diff --git a/ydb/core/kqp/host/CMakeLists.linux-aarch64.txt b/ydb/core/kqp/host/CMakeLists.linux-aarch64.txt index bb1b772bf43..873c5c85dab 100644 --- a/ydb/core/kqp/host/CMakeLists.linux-aarch64.txt +++ b/ydb/core/kqp/host/CMakeLists.linux-aarch64.txt @@ -20,7 +20,6 @@ target_link_libraries(core-kqp-host PUBLIC core-kqp-opt core-kqp-provider tx-long_tx_service-public - library-yql-ast yql-core-services minikql-invoke_builtins-llvm library-yql-sql diff --git a/ydb/core/kqp/host/CMakeLists.linux-x86_64.txt b/ydb/core/kqp/host/CMakeLists.linux-x86_64.txt index bb1b772bf43..873c5c85dab 100644 --- a/ydb/core/kqp/host/CMakeLists.linux-x86_64.txt +++ b/ydb/core/kqp/host/CMakeLists.linux-x86_64.txt @@ -20,7 +20,6 @@ target_link_libraries(core-kqp-host PUBLIC core-kqp-opt core-kqp-provider tx-long_tx_service-public - library-yql-ast yql-core-services minikql-invoke_builtins-llvm library-yql-sql diff --git a/ydb/core/kqp/host/CMakeLists.windows-x86_64.txt b/ydb/core/kqp/host/CMakeLists.windows-x86_64.txt index 35f11fc1934..620aebb8231 100644 --- a/ydb/core/kqp/host/CMakeLists.windows-x86_64.txt +++ b/ydb/core/kqp/host/CMakeLists.windows-x86_64.txt @@ -19,7 +19,6 @@ target_link_libraries(core-kqp-host PUBLIC core-kqp-opt core-kqp-provider tx-long_tx_service-public - library-yql-ast yql-core-services minikql-invoke_builtins-llvm library-yql-sql diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index bfe6f2347b6..e2a37754bc8 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -8,7 +8,6 @@ #include <ydb/core/kqp/provider/yql_kikimr_provider_impl.h> #include <ydb/core/kqp/provider/yql_kikimr_results.h> -#include <ydb/library/yql/ast/yql_type_string.h> #include <ydb/library/yql/core/yql_opt_proposed_by_data.h> #include <ydb/library/yql/core/services/yql_plan.h> #include <ydb/library/yql/core/services/yql_transform_pipeline.h> @@ -36,6 +35,14 @@ using namespace NThreading; namespace { +void FillColumnMeta(const NKqpProto::TKqpPhyQuery& phyQuery, IKqpHost::TQueryResult& queryResult) { + const auto& bindings = phyQuery.GetResultBindings(); + for (const auto& binding: bindings) { + auto meta = queryResult.ResultSetsMeta.Add(); + meta->CopyFrom(binding.GetResultSetMeta()); + } +} + void AddQueryStats(NKqpProto::TKqpStatsQuery& total, NKqpProto::TKqpStatsQuery&& stats) { // NOTE: Do not add duration & compilation stats as they are computed for the // whole query in KQP worker. @@ -294,11 +301,8 @@ public: YQL_ENSURE(ExecuteCtx.QueryResults.size() == 1); queryResult = std::move(ExecuteCtx.QueryResults[0]); queryResult.QueryPlan = queryResult.PreparingQuery->GetPhysicalQuery().GetQueryPlan(); - auto& bindings = queryResult.PreparingQuery->GetPhysicalQuery().GetResultBindings(); - for (const auto& binding: bindings) { - auto meta = queryResult.ResultSetsMeta.Add(); - meta->CopyFrom(binding.GetResultSetMeta()); - } + + FillColumnMeta(queryResult.PreparingQuery->GetPhysicalQuery(), queryResult); } private: @@ -324,6 +328,8 @@ public: YQL_ENSURE(QueryCtx->PrepareOnly); YQL_ENSURE(QueryCtx->PreparingQuery); + FillColumnMeta(QueryCtx->PreparingQuery->GetPhysicalQuery(), prepareResult); + // TODO: it's a const function, why do we move from class members? prepareResult.PreparingQuery = std::move(QueryCtx->PreparingQuery); prepareResult.PreparingQuery->SetText(std::move(QueryText)); @@ -1245,6 +1251,9 @@ private: TQueryResult explainResult; explainResult.SetSuccess(); YQL_ENSURE(prepared.PreparingQuery->GetVersion() == NKikimrKqp::TPreparedQuery::VERSION_PHYSICAL_V1); + + FillColumnMeta(prepared.PreparingQuery->GetPhysicalQuery(), explainResult); + explainResult.QueryPlan = std::move(prepared.QueryPlan); explainResult.QueryAst = std::move(*prepared.PreparingQuery->MutablePhysicalQuery()->MutableQueryAst()); explainResult.SqlVersion = prepared.SqlVersion; diff --git a/ydb/core/kqp/host/ya.make b/ydb/core/kqp/host/ya.make index 3caaeba32f8..88bb492d552 100644 --- a/ydb/core/kqp/host/ya.make +++ b/ydb/core/kqp/host/ya.make @@ -14,7 +14,6 @@ PEERDIR( ydb/core/kqp/opt ydb/core/kqp/provider ydb/core/tx/long_tx_service/public - ydb/library/yql/ast ydb/library/yql/core/services ydb/library/yql/minikql/invoke_builtins/llvm ydb/library/yql/sql diff --git a/ydb/core/kqp/session_actor/kqp_worker_actor.cpp b/ydb/core/kqp/session_actor/kqp_worker_actor.cpp index 8f20984b4e0..cae1bd5d244 100644 --- a/ydb/core/kqp/session_actor/kqp_worker_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_worker_actor.cpp @@ -800,8 +800,6 @@ private: Counters->ReportSqlVersion(Settings.DbCounters, *queryResult.SqlVersion); } - FillTxInfo(responseEv->Record); - auto& stats = queryResult.QueryStats; stats.SetDurationUs(queryDuration.MicroSeconds()); stats.SetWorkerCpuTimeUs(QueryState->CpuTime.MicroSeconds()); @@ -924,11 +922,18 @@ private: AddQueryIssues(*ev.MutableResponse(), issues); if (replyResults) { + auto resp = ev.MutableResponse(); for (auto& result : queryResult.Results) { // If we have result it must be allocated on protobuf arena Y_ASSERT(result->GetArena()); - Y_ASSERT(ev.MutableResponse()->GetArena() == result->GetArena()); - ev.MutableResponse()->AddResults()->Swap(result); + Y_ASSERT(resp->GetArena() == result->GetArena()); + resp->AddResults()->Swap(result); + } + } else { + auto resp = ev.MutableResponse(); + for (auto& result : queryResult.ResultSetsMeta) { + auto ydbRes = resp->AddYdbResults(); + ydbRes->mutable_columns()->Swap(result.mutable_columns()); } } @@ -979,11 +984,6 @@ private: YQL_ENSURE(!replyQueryId); } - void FillTxInfo(TEvKqp::TProtoArenaHolder<NKikimrKqp::TEvQueryResponse>& record) { - Y_UNUSED(record); - return; - } - void MakeNewQueryState() { ++QueryId; QueryState.Reset(MakeHolder<TKqpQueryState>()); |