From bd87563b37b0229e33a66cb64e909ccddaf1b172 Mon Sep 17 00:00:00 2001 From: Bulat Date: Wed, 3 Jul 2024 12:11:40 +0300 Subject: [PATCH] Replaced proto types to SDK types in ExecuteScript settings (#6094) --- ydb/core/fq/libs/compute/common/utils.cpp | 25 +++++---- ydb/core/fq/libs/compute/common/utils.h | 7 +-- ydb/core/fq/libs/compute/ydb/events/events.h | 14 ++--- .../fq/libs/compute/ydb/executer_actor.cpp | 28 +++++----- ydb/core/fq/libs/compute/ydb/executer_actor.h | 4 +- .../libs/compute/ydb/result_writer_actor.cpp | 6 ++- .../libs/compute/ydb/status_tracker_actor.cpp | 4 +- .../s3/kqp_federated_query_ut.cpp | 6 +-- ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp | 52 +++++++++---------- .../sdk/cpp/client/ydb_query/client.cpp | 6 +-- ydb/public/sdk/cpp/client/ydb_query/query.cpp | 15 +++++- ydb/public/sdk/cpp/client/ydb_query/query.h | 29 +++++++---- ydb/public/sdk/cpp/client/ydb_query/stats.h | 2 + 13 files changed, 115 insertions(+), 83 deletions(-) diff --git a/ydb/core/fq/libs/compute/common/utils.cpp b/ydb/core/fq/libs/compute/common/utils.cpp index a7fc8cd81aa1..047d08f9eb08 100644 --- a/ydb/core/fq/libs/compute/common/utils.cpp +++ b/ydb/core/fq/libs/compute/common/utils.cpp @@ -5,6 +5,8 @@ #include #include +#include + namespace NFq { using TAggregates = std::map>; @@ -1133,8 +1135,8 @@ TString SimplifiedPlan(const TString& plan) { } struct TNoneStatProcessor : IPlanStatProcessor { - Ydb::Query::StatsMode GetStatsMode() override { - return Ydb::Query::StatsMode::STATS_MODE_NONE; + NYdb::NQuery::EStatsMode GetStatsMode() override { + return NYdb::NQuery::EStatsMode::None; } TString ConvertPlan(const TString& plan) override { @@ -1160,14 +1162,14 @@ struct TNoneStatProcessor : IPlanStatProcessor { }; struct TBasicStatProcessor : TNoneStatProcessor { - Ydb::Query::StatsMode GetStatsMode() override { - return Ydb::Query::StatsMode::STATS_MODE_BASIC; + NYdb::NQuery::EStatsMode GetStatsMode() override { + return NYdb::NQuery::EStatsMode::Basic; } }; struct TPlanStatProcessor : IPlanStatProcessor { - Ydb::Query::StatsMode GetStatsMode() override { - return Ydb::Query::StatsMode::STATS_MODE_FULL; + NYdb::NQuery::EStatsMode GetStatsMode() override { + return NYdb::NQuery::EStatsMode::Full; } TString ConvertPlan(const TString& plan) override { @@ -1204,8 +1206,8 @@ struct TCostStatProcessor : TPlanStatProcessor { }; struct TProfileStatProcessor : TPlanStatProcessor { - Ydb::Query::StatsMode GetStatsMode() override { - return Ydb::Query::StatsMode::STATS_MODE_PROFILE; + NYdb::NQuery::EStatsMode GetStatsMode() override { + return NYdb::NQuery::EStatsMode::Profile; } }; @@ -1233,7 +1235,7 @@ PingTaskRequestBuilder::PingTaskRequestBuilder(const NConfig::TCommonConfig& com {} Fq::Private::PingTaskRequest PingTaskRequestBuilder::Build( - const Ydb::TableStats::QueryStats& queryStats, + const NYdb::NQuery::TExecStats& queryStats, const NYql::TIssues& issues, std::optional computeStatus, std::optional pendingStatusCode @@ -1256,8 +1258,9 @@ Fq::Private::PingTaskRequest PingTaskRequestBuilder::Build( } -Fq::Private::PingTaskRequest PingTaskRequestBuilder::Build(const Ydb::TableStats::QueryStats& queryStats) { - return Build(queryStats.query_plan(), queryStats.query_ast(), queryStats.compilation().duration_us(), queryStats.total_duration_us()); +Fq::Private::PingTaskRequest PingTaskRequestBuilder::Build(const NYdb::NQuery::TExecStats& queryStats) { + const auto& statsProto = NYdb::TProtoAccessor().GetProto(queryStats); + return Build(statsProto.query_plan(), statsProto.query_ast(), statsProto.compilation().duration_us(), statsProto.total_duration_us()); } Fq::Private::PingTaskRequest PingTaskRequestBuilder::Build(const TString& queryPlan, const TString& queryAst, int64_t compilationTimeUs, int64_t computeTimeUs) { diff --git a/ydb/core/fq/libs/compute/common/utils.h b/ydb/core/fq/libs/compute/common/utils.h index 50a468141e85..f5a3fe91da8d 100644 --- a/ydb/core/fq/libs/compute/common/utils.h +++ b/ydb/core/fq/libs/compute/common/utils.h @@ -9,6 +9,7 @@ #include #include +#include namespace NFq { @@ -53,7 +54,7 @@ TPublicStat GetPublicStat(const TString& statistics); struct IPlanStatProcessor { virtual ~IPlanStatProcessor() = default; - virtual Ydb::Query::StatsMode GetStatsMode() = 0; + virtual NYdb::NQuery::EStatsMode GetStatsMode() = 0; virtual TString ConvertPlan(const TString& plan) = 0; virtual TString GetPlanVisualization(const TString& plan) = 0; virtual TString GetQueryStat(const TString& plan, double& cpuUsage) = 0; @@ -67,12 +68,12 @@ class PingTaskRequestBuilder { public: PingTaskRequestBuilder(const NConfig::TCommonConfig& commonConfig, std::unique_ptr&& processor); Fq::Private::PingTaskRequest Build( - const Ydb::TableStats::QueryStats& queryStats, + const NYdb::NQuery::TExecStats& queryStats, const NYql::TIssues& issues, std::optional computeStatus = std::nullopt, std::optional pendingStatusCode = std::nullopt ); - Fq::Private::PingTaskRequest Build(const Ydb::TableStats::QueryStats& queryStats); + Fq::Private::PingTaskRequest Build(const NYdb::NQuery::TExecStats& queryStats); Fq::Private::PingTaskRequest Build(const TString& queryPlan, const TString& queryAst, int64_t compilationTimeUs, int64_t computeTimeUs); NYql::TIssues Issues; double CpuUsage = 0.0; diff --git a/ydb/core/fq/libs/compute/ydb/events/events.h b/ydb/core/fq/libs/compute/ydb/events/events.h index c4276ae7c66b..741b5abbcfb0 100644 --- a/ydb/core/fq/libs/compute/ydb/events/events.h +++ b/ydb/core/fq/libs/compute/ydb/events/events.h @@ -71,7 +71,7 @@ struct TEvYdbCompute { // Events struct TEvExecuteScriptRequest : public NActors::TEventLocal { - TEvExecuteScriptRequest(TString sql, TString idempotencyKey, const TDuration& resultTtl, const TDuration& operationTimeout, Ydb::Query::Syntax syntax, Ydb::Query::ExecMode execMode, Ydb::Query::StatsMode statsMode, const TString& traceId, const std::map& queryParameters) + TEvExecuteScriptRequest(TString sql, TString idempotencyKey, const TDuration& resultTtl, const TDuration& operationTimeout, NYdb::NQuery::ESyntax syntax, NYdb::NQuery::EExecMode execMode, NYdb::NQuery::EStatsMode statsMode, const TString& traceId, const std::map& queryParameters) : Sql(std::move(sql)) , IdempotencyKey(std::move(idempotencyKey)) , ResultTtl(resultTtl) @@ -87,9 +87,9 @@ struct TEvYdbCompute { TString IdempotencyKey; TDuration ResultTtl; TDuration OperationTimeout; - Ydb::Query::Syntax Syntax = Ydb::Query::SYNTAX_YQL_V1; - Ydb::Query::ExecMode ExecMode = Ydb::Query::EXEC_MODE_EXECUTE; - Ydb::Query::StatsMode StatsMode = Ydb::Query::StatsMode::STATS_MODE_FULL; + NYdb::NQuery::ESyntax Syntax = NYdb::NQuery::ESyntax::YqlV1; + NYdb::NQuery::EExecMode ExecMode = NYdb::NQuery::EExecMode::Execute; + NYdb::NQuery::EStatsMode StatsMode = NYdb::NQuery::EStatsMode::Full; TString TraceId; std::map QueryParameters; }; @@ -127,7 +127,7 @@ struct TEvYdbCompute { , Ready(ready) {} - TEvGetOperationResponse(NYdb::NQuery::EExecStatus execStatus, Ydb::StatusIds::StatusCode statusCode, const TVector& resultSetsMeta, const Ydb::TableStats::QueryStats& queryStats, NYql::TIssues issues, bool ready = true) + TEvGetOperationResponse(NYdb::NQuery::EExecStatus execStatus, Ydb::StatusIds::StatusCode statusCode, const std::vector& resultSetsMeta, const NYdb::NQuery::TExecStats& queryStats, NYql::TIssues issues, bool ready = true) : ExecStatus(execStatus) , StatusCode(statusCode) , ResultSetsMeta(resultSetsMeta) @@ -139,8 +139,8 @@ struct TEvYdbCompute { NYdb::NQuery::EExecStatus ExecStatus = NYdb::NQuery::EExecStatus::Unspecified; Ydb::StatusIds::StatusCode StatusCode = Ydb::StatusIds::STATUS_CODE_UNSPECIFIED; - TVector ResultSetsMeta; - Ydb::TableStats::QueryStats QueryStats; + std::vector ResultSetsMeta; + NYdb::NQuery::TExecStats QueryStats; NYql::TIssues Issues; NYdb::EStatus Status; bool Ready; diff --git a/ydb/core/fq/libs/compute/ydb/executer_actor.cpp b/ydb/core/fq/libs/compute/ydb/executer_actor.cpp index 0f13cfe7e863..a9d45faa010a 100644 --- a/ydb/core/fq/libs/compute/ydb/executer_actor.cpp +++ b/ydb/core/fq/libs/compute/ydb/executer_actor.cpp @@ -59,7 +59,7 @@ class TExecuterActor : public TBaseComputeActor { } }; - TExecuterActor(const TRunActorParams& params, Ydb::Query::StatsMode statsMode, const TActorId& parent, const TActorId& connector, const TActorId& pinger, const ::NYql::NCommon::TServiceCounters& queryCounters) + TExecuterActor(const TRunActorParams& params, NYdb::NQuery::EStatsMode statsMode, const TActorId& parent, const TActorId& connector, const TActorId& pinger, const ::NYql::NCommon::TServiceCounters& queryCounters) : TBaseComputeActor(queryCounters, "Executer") , Params(params) , StatsMode(statsMode) @@ -115,38 +115,38 @@ class TExecuterActor : public TBaseComputeActor { } void SendExecuteScript() { - Register(new TRetryActor>(Counters.GetCounters(ERequestType::RT_EXECUTE_SCRIPT), SelfId(), Connector, Params.Sql, Params.JobId, Params.ResultTtl, Params.ExecutionTtl, GetSyntax(), GetExecuteMode(), StatsMode, Params.JobId + "_" + ToString(Params.RestartCount), Params.QueryParameters)); + Register(new TRetryActor>(Counters.GetCounters(ERequestType::RT_EXECUTE_SCRIPT), SelfId(), Connector, Params.Sql, Params.JobId, Params.ResultTtl, Params.ExecutionTtl, GetSyntax(), GetExecuteMode(), StatsMode, Params.JobId + "_" + ToString(Params.RestartCount), Params.QueryParameters)); } - Ydb::Query::Syntax GetSyntax() const { + NYdb::NQuery::ESyntax GetSyntax() const { switch (Params.QuerySyntax) { case FederatedQuery::QueryContent::PG: - return Ydb::Query::SYNTAX_PG; + return NYdb::NQuery::ESyntax::Pg; case FederatedQuery::QueryContent::YQL_V1: - return Ydb::Query::SYNTAX_YQL_V1; + return NYdb::NQuery::ESyntax::YqlV1; case FederatedQuery::QueryContent::QUERY_SYNTAX_UNSPECIFIED: case FederatedQuery::QueryContent_QuerySyntax_QueryContent_QuerySyntax_INT_MAX_SENTINEL_DO_NOT_USE_: case FederatedQuery::QueryContent_QuerySyntax_QueryContent_QuerySyntax_INT_MIN_SENTINEL_DO_NOT_USE_: - return Ydb::Query::SYNTAX_UNSPECIFIED; + return NYdb::NQuery::ESyntax::Unspecified; } } - Ydb::Query::ExecMode GetExecuteMode() const { + NYdb::NQuery::EExecMode GetExecuteMode() const { switch (Params.ExecuteMode) { case FederatedQuery::RUN: - return Ydb::Query::ExecMode::EXEC_MODE_EXECUTE; + return NYdb::NQuery::EExecMode::Execute; case FederatedQuery::PARSE: - return Ydb::Query::ExecMode::EXEC_MODE_PARSE; + return NYdb::NQuery::EExecMode::Parse; case FederatedQuery::VALIDATE: - return Ydb::Query::ExecMode::EXEC_MODE_VALIDATE; + return NYdb::NQuery::EExecMode::Validate; case FederatedQuery::EXPLAIN: - return Ydb::Query::ExecMode::EXEC_MODE_EXPLAIN; + return NYdb::NQuery::EExecMode::Explain; case FederatedQuery::EXECUTE_MODE_UNSPECIFIED: case FederatedQuery::COMPILE: case FederatedQuery::SAVE: case FederatedQuery::ExecuteMode_INT_MAX_SENTINEL_DO_NOT_USE_: case FederatedQuery::ExecuteMode_INT_MIN_SENTINEL_DO_NOT_USE_: - return Ydb::Query::ExecMode::EXEC_MODE_UNSPECIFIED; + return NYdb::NQuery::EExecMode::Unspecified; } } @@ -163,7 +163,7 @@ class TExecuterActor : public TBaseComputeActor { private: TRunActorParams Params; - Ydb::Query::StatsMode StatsMode; + NYdb::NQuery::EStatsMode StatsMode; TActorId Parent; TActorId Connector; TActorId Pinger; @@ -174,7 +174,7 @@ class TExecuterActor : public TBaseComputeActor { }; std::unique_ptr CreateExecuterActor(const TRunActorParams& params, - Ydb::Query::StatsMode statsMode, + NYdb::NQuery::EStatsMode statsMode, const TActorId& parent, const TActorId& connector, const TActorId& pinger, diff --git a/ydb/core/fq/libs/compute/ydb/executer_actor.h b/ydb/core/fq/libs/compute/ydb/executer_actor.h index c1a6c1d6478a..683d448e0e35 100644 --- a/ydb/core/fq/libs/compute/ydb/executer_actor.h +++ b/ydb/core/fq/libs/compute/ydb/executer_actor.h @@ -6,10 +6,12 @@ #include +#include + namespace NFq { std::unique_ptr CreateExecuterActor(const TRunActorParams& params, - Ydb::Query::StatsMode statsMode, + NYdb::NQuery::EStatsMode statsMode, const NActors::TActorId& parent, const NActors::TActorId& connector, const NActors::TActorId& pinger, diff --git a/ydb/core/fq/libs/compute/ydb/result_writer_actor.cpp b/ydb/core/fq/libs/compute/ydb/result_writer_actor.cpp index cae7e6b57f65..26f9f1a22765 100644 --- a/ydb/core/fq/libs/compute/ydb/result_writer_actor.cpp +++ b/ydb/core/fq/libs/compute/ydb/result_writer_actor.cpp @@ -327,8 +327,10 @@ class TResultWriterActor : public TBaseComputeActor { for (const auto& resultSetMeta: ev.Get()->Get()->ResultSetsMeta) { auto& meta = *PingTaskRequest.add_result_set_meta(); - for (const auto& column: resultSetMeta.columns()) { - *meta.add_column() = column; + for (const auto& column: resultSetMeta.Columns) { + auto& new_column = *meta.add_column(); + new_column.set_name(column.Name); + *new_column.mutable_type() = column.Type.GetProto(); } } diff --git a/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp b/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp index 062cf855d83f..8dae1eba177f 100644 --- a/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp +++ b/ydb/core/fq/libs/compute/ydb/status_tracker_actor.cpp @@ -234,7 +234,7 @@ class TStatusTrackerActor : public TBaseComputeActor { } void UpdateCpuQuota(double cpuUsage) { - TDuration duration = TDuration::MicroSeconds(QueryStats.total_duration_us()); + TDuration duration = QueryStats.GetTotalDuration(); if (cpuUsage && duration) { Send(NFq::ComputeDatabaseControlPlaneServiceActorId(), new TEvYdbCompute::TEvCpuQuotaAdjust(Params.Scope.ToString(), duration, cpuUsage)); } @@ -282,7 +282,7 @@ class TStatusTrackerActor : public TBaseComputeActor { NYdb::EStatus Status = NYdb::EStatus::SUCCESS; NYdb::NQuery::EExecStatus ExecStatus = NYdb::NQuery::EExecStatus::Unspecified; NYql::NDqProto::StatusIds::StatusCode StatusCode = NYql::NDqProto::StatusIds::StatusCode::StatusIds_StatusCode_UNSPECIFIED; - Ydb::TableStats::QueryStats QueryStats; + NYdb::NQuery::TExecStats QueryStats; NKikimr::TBackoffTimer BackoffTimer; NFq::TStatusCodeByScopeCounters::TPtr FailedStatusCodeCounters; FederatedQuery::QueryMeta::ComputeStatus ComputeStatus = FederatedQuery::QueryMeta::RUNNING; diff --git a/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp b/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp index 722c2a1f1d97..0dd70339a5c9 100644 --- a/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp +++ b/ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp @@ -188,7 +188,7 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) { auto result = session.ExecuteSchemeQuery(query).GetValueSync(); UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString()); - auto settings = TExecuteScriptSettings().StatsMode(Ydb::Query::STATS_MODE_BASIC); + auto settings = TExecuteScriptSettings().StatsMode(EStatsMode::Basic); const TString sql = fmt::format(R"( SELECT * FROM `{external_table}` @@ -201,12 +201,12 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) { NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), kikimr->GetDriver()); UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecStatus, EExecStatus::Completed); - UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecStats.compilation().from_cache(), false); + UNIT_ASSERT_EQUAL(TProtoAccessor().GetProto(readyOp.Metadata().ExecStats).compilation().from_cache(), false); scriptExecutionOperation = db.ExecuteScript(sql, settings).ExtractValueSync(); readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), kikimr->GetDriver()); UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecStatus, EExecStatus::Completed); - UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecStats.compilation().from_cache(), false); + UNIT_ASSERT_EQUAL(TProtoAccessor().GetProto(readyOp.Metadata().ExecStats).compilation().from_cache(), false); } Y_UNIT_TEST(ExecuteScriptWithDataSource) { diff --git a/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp index 3922002119b6..f6ad2d488e45 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_scripts_ut.cpp @@ -35,9 +35,9 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecutionId, scriptExecutionOperation.Metadata().ExecutionId); UNIT_ASSERT_STRING_CONTAINS(readyOp.Metadata().ScriptContent.Text, "SELECT 42"); UNIT_ASSERT_VALUES_EQUAL(readyOp.Metadata().ResultSetsMeta.size(), 1); - UNIT_ASSERT_VALUES_EQUAL(readyOp.Metadata().ResultSetsMeta.front().columns_size(), 1); - UNIT_ASSERT_VALUES_EQUAL(readyOp.Metadata().ResultSetsMeta.front().columns(0).name(), "column0"); - UNIT_ASSERT_EQUAL(readyOp.Metadata().ResultSetsMeta.front().columns(0).type().type_id(), Ydb::Type::PrimitiveTypeId::Type_PrimitiveTypeId_INT32); + UNIT_ASSERT_VALUES_EQUAL(readyOp.Metadata().ResultSetsMeta.front().Columns.size(), 1); + UNIT_ASSERT_VALUES_EQUAL(readyOp.Metadata().ResultSetsMeta.front().Columns[0].Name, "column0"); + UNIT_ASSERT_EQUAL(readyOp.Metadata().ResultSetsMeta.front().Columns[0].Type.GetProto().type_id(), Ydb::Type::PrimitiveTypeId::Type_PrimitiveTypeId_INT32); TFetchScriptResultsResult results = db.FetchScriptResults(scriptExecutionOperation.Id(), 0).ExtractValueSync(); UNIT_ASSERT_C(results.IsSuccess(), results.GetIssues().ToString()); @@ -133,11 +133,11 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { } } - void ValidatePlan(const TString& plan) { - UNIT_ASSERT(!plan.empty()); + void ValidatePlan(const TMaybe& plan) { + UNIT_ASSERT(plan); UNIT_ASSERT(plan != "{}"); NJson::TJsonValue jsonPlan; - NJson::ReadJsonTree(plan, &jsonPlan, true); + NJson::ReadJsonTree(plan.GetRef(), &jsonPlan, true); UNIT_ASSERT(ValidatePlanNodeIds(jsonPlan)); } @@ -145,7 +145,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { auto kikimr = DefaultKikimrRunner(); auto db = kikimr.GetQueryClient(); - auto settings = TExecuteScriptSettings().ExecMode(Ydb::Query::EXEC_MODE_EXPLAIN); + auto settings = TExecuteScriptSettings().ExecMode(EExecMode::Explain); auto scriptExecutionOperation = db.ExecuteScript(R"( SELECT 42 )", settings).ExtractValueSync(); @@ -158,15 +158,15 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecutionId, scriptExecutionOperation.Metadata().ExecutionId); UNIT_ASSERT_STRING_CONTAINS(readyOp.Metadata().ScriptContent.Text, "SELECT 42"); - ValidatePlan(readyOp.Metadata().ExecStats.query_plan()); - UNIT_ASSERT(readyOp.Metadata().ExecStats.query_ast()); + ValidatePlan(readyOp.Metadata().ExecStats.GetPlan()); + UNIT_ASSERT(readyOp.Metadata().ExecStats.GetAst()); } Y_UNIT_TEST(ParseScript) { auto kikimr = DefaultKikimrRunner(); auto db = kikimr.GetQueryClient(); - auto settings = TExecuteScriptSettings().ExecMode(Ydb::Query::EXEC_MODE_PARSE); + auto settings = TExecuteScriptSettings().ExecMode(EExecMode::Parse); auto scriptExecutionOperation = db.ExecuteScript(R"( SELECT 42 )", settings).ExtractValueSync(); @@ -182,7 +182,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { auto kikimr = DefaultKikimrRunner(); auto db = kikimr.GetQueryClient(); - auto settings = TExecuteScriptSettings().ExecMode(Ydb::Query::EXEC_MODE_VALIDATE); + auto settings = TExecuteScriptSettings().ExecMode(EExecMode::Validate); auto scriptExecutionOperation = db.ExecuteScript(R"( SELECT 42 )", settings).ExtractValueSync(); @@ -197,7 +197,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { auto kikimr = DefaultKikimrRunner(); auto db = kikimr.GetQueryClient(); - auto settings = TExecuteScriptSettings().ExecMode(Ydb::Query::EXEC_MODE_UNSPECIFIED); + auto settings = TExecuteScriptSettings().ExecMode(EExecMode::Unspecified); auto scriptExecutionOperation = db.ExecuteScript(R"( SELECT 42 )", settings).ExtractValueSync(); @@ -212,7 +212,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { auto db = kikimr.GetQueryClient(); auto settings = TExecuteScriptSettings() - .Syntax(Ydb::Query::SYNTAX_PG); + .Syntax(ESyntax::Pg); auto scriptExecutionOperation = db.ExecuteScript(R"( SELECT * FROM (VALUES @@ -268,7 +268,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { ])", FormatResultSetYson(results.GetResultSet())); } - void ExecuteScriptWithStatsMode(Ydb::Query::StatsMode statsMode) { + void ExecuteScriptWithStatsMode(EStatsMode statsMode) { auto kikimr = DefaultKikimrRunner(); auto db = kikimr.GetQueryClient(); @@ -287,36 +287,36 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { UNIT_ASSERT_EQUAL(readyOp.Metadata().ExecutionId, scriptExecutionOperation.Metadata().ExecutionId); UNIT_ASSERT_STRING_CONTAINS(readyOp.Metadata().ScriptContent.Text, "SELECT 42"); - if (statsMode == Ydb::Query::STATS_MODE_NONE) { + if (statsMode == EStatsMode::None) { return; } // TODO: more checks? - UNIT_ASSERT_C(readyOp.Metadata().ExecStats.query_phases_size() == 1, readyOp.Metadata().ExecStats); - UNIT_ASSERT_C(readyOp.Metadata().ExecStats.total_duration_us() > 0, readyOp.Metadata().ExecStats); + UNIT_ASSERT_C(TProtoAccessor().GetProto(readyOp.Metadata().ExecStats).query_phases_size() == 1, readyOp.Metadata().ExecStats.ToString()); + UNIT_ASSERT_C(readyOp.Metadata().ExecStats.GetTotalDuration() > TDuration::Zero(), readyOp.Metadata().ExecStats.ToString()); - if (statsMode == Ydb::Query::STATS_MODE_BASIC) { + if (statsMode == EStatsMode::Basic) { return; } - ValidatePlan(readyOp.Metadata().ExecStats.query_plan()); - UNIT_ASSERT(readyOp.Metadata().ExecStats.query_ast()); + ValidatePlan(readyOp.Metadata().ExecStats.GetPlan()); + UNIT_ASSERT(readyOp.Metadata().ExecStats.GetAst()); } Y_UNIT_TEST(ExecuteScriptStatsBasic) { - ExecuteScriptWithStatsMode(Ydb::Query::STATS_MODE_BASIC); + ExecuteScriptWithStatsMode(EStatsMode::Basic); } Y_UNIT_TEST(ExecuteScriptStatsFull) { - ExecuteScriptWithStatsMode(Ydb::Query::STATS_MODE_FULL); + ExecuteScriptWithStatsMode(EStatsMode::Full); } Y_UNIT_TEST(ExecuteScriptStatsProfile) { - ExecuteScriptWithStatsMode(Ydb::Query::STATS_MODE_PROFILE); + ExecuteScriptWithStatsMode(EStatsMode::Profile); } Y_UNIT_TEST(ExecuteScriptStatsNone) { - ExecuteScriptWithStatsMode(Ydb::Query::STATS_MODE_NONE); + ExecuteScriptWithStatsMode(EStatsMode::None); } Y_UNIT_TEST(ListScriptExecutions) { @@ -656,7 +656,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { } TExecuteScriptSettings settings; - settings.StatsMode(Ydb::Query::StatsMode::STATS_MODE_FULL); + settings.StatsMode(EStatsMode::Full); auto scriptExecutionOperation = db.ExecuteScript(sql, settings).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(scriptExecutionOperation.Status().GetStatus(), EStatus::SUCCESS, scriptExecutionOperation.Status().GetIssues().ToString()); @@ -820,7 +820,7 @@ Y_UNIT_TEST_SUITE(KqpQueryServiceScripts) { auto db = kikimr.GetQueryClient(); auto scriptExecutionOperation = CreateScriptExecutionOperation(1, db, kikimr.GetDriver()); - UNIT_ASSERT_STRING_CONTAINS(scriptExecutionOperation.Metadata().ExecStats.query_ast(), "\"idx\" (DataType 'Int32)"); + UNIT_ASSERT_STRING_CONTAINS(scriptExecutionOperation.Metadata().ExecStats.GetAst().GetRef(), "\"idx\" (DataType 'Int32)"); } } diff --git a/ydb/public/sdk/cpp/client/ydb_query/client.cpp b/ydb/public/sdk/cpp/client/ydb_query/client.cpp index c8206de09737..a4645695c84f 100644 --- a/ydb/public/sdk/cpp/client/ydb_query/client.cpp +++ b/ydb/public/sdk/cpp/client/ydb_query/client.cpp @@ -84,10 +84,10 @@ class TQueryClient::TImpl: public TClientImplCommon, public NThreading::TFuture ExecuteScript(const TString& script, const TMaybe& params, const TExecuteScriptSettings& settings) { using namespace Ydb::Query; auto request = MakeOperationRequest(settings); - request.set_exec_mode(settings.ExecMode_); - request.set_stats_mode(settings.StatsMode_); + request.set_exec_mode(::Ydb::Query::ExecMode(settings.ExecMode_)); + request.set_stats_mode(::Ydb::Query::StatsMode(settings.StatsMode_)); request.set_pool_id(settings.PoolId_); - request.mutable_script_content()->set_syntax(settings.Syntax_); + request.mutable_script_content()->set_syntax(::Ydb::Query::Syntax(settings.Syntax_)); request.mutable_script_content()->set_text(script); SetDuration(settings.ResultsTtl_, *request.mutable_results_ttl()); diff --git a/ydb/public/sdk/cpp/client/ydb_query/query.cpp b/ydb/public/sdk/cpp/client/ydb_query/query.cpp index 49066dea3365..4f30e763eba9 100644 --- a/ydb/public/sdk/cpp/client/ydb_query/query.cpp +++ b/ydb/public/sdk/cpp/client/ydb_query/query.cpp @@ -1,5 +1,7 @@ #include "query.h" +#include + namespace NYdb::NQuery { std::optional ParseStatsMode(std::string_view statsMode) { @@ -42,8 +44,17 @@ TScriptExecutionOperation::TScriptExecutionOperation(TStatus&& status, Ydb::Oper Metadata_.ExecutionId = metadata.execution_id(); Metadata_.ExecMode = static_cast(metadata.exec_mode()); Metadata_.ExecStatus = static_cast(metadata.exec_status()); - Metadata_.ExecStats = metadata.exec_stats(); - Metadata_.ResultSetsMeta.insert(Metadata_.ResultSetsMeta.end(), metadata.result_sets_meta().begin(), metadata.result_sets_meta().end()); + Metadata_.ExecStats = TExecStats(std::move(*metadata.mutable_exec_stats())); + + Metadata_.ResultSetsMeta.reserve(metadata.result_sets_meta_size()); + for (const auto& resultSetMeta : metadata.result_sets_meta()) { + std::vector columns; + columns.reserve(resultSetMeta.columns_size()); + for (const auto& column : resultSetMeta.columns()) { + columns.emplace_back(column.name(), column.type()); + } + Metadata_.ResultSetsMeta.emplace_back(std::move(columns)); + } if (metadata.has_script_content()) { Metadata_.ScriptContent.Syntax = static_cast(metadata.script_content().syntax()); diff --git a/ydb/public/sdk/cpp/client/ydb_query/query.h b/ydb/public/sdk/cpp/client/ydb_query/query.h index d9528c7474a3..84944e1f030c 100644 --- a/ydb/public/sdk/cpp/client/ydb_query/query.h +++ b/ydb/public/sdk/cpp/client/ydb_query/query.h @@ -1,7 +1,5 @@ #pragma once -#include - #include #include #include @@ -11,8 +9,6 @@ #include -#include - namespace NYdb::NQuery { enum class ESyntax { @@ -97,9 +93,9 @@ using TAsyncBeginTransactionResult = NThreading::TFuture; struct TExecuteScriptSettings : public TOperationRequestSettings { - FLUENT_SETTING_DEFAULT(Ydb::Query::Syntax, Syntax, Ydb::Query::SYNTAX_YQL_V1); - FLUENT_SETTING_DEFAULT(Ydb::Query::ExecMode, ExecMode, Ydb::Query::EXEC_MODE_EXECUTE); - FLUENT_SETTING_DEFAULT(Ydb::Query::StatsMode, StatsMode, Ydb::Query::STATS_MODE_NONE); + FLUENT_SETTING_DEFAULT(ESyntax, Syntax, ESyntax::YqlV1); + FLUENT_SETTING_DEFAULT(EExecMode, ExecMode, EExecMode::Execute); + FLUENT_SETTING_DEFAULT(EStatsMode, StatsMode, EStatsMode::None); FLUENT_SETTING(TDuration, ResultsTtl); FLUENT_SETTING(TString, PoolId); }; @@ -117,6 +113,21 @@ class TQueryContent { ESyntax Syntax = ESyntax::Unspecified; }; +class TResultSetMeta { +public: + TResultSetMeta() = default; + + explicit TResultSetMeta(const std::vector& columns) + : Columns(columns) + {} + + explicit TResultSetMeta(std::vector&& columns) + : Columns(std::move(columns)) + {} + + std::vector Columns; +}; + class TScriptExecutionOperation : public TOperation { public: struct TMetadata { @@ -125,8 +136,8 @@ class TScriptExecutionOperation : public TOperation { EExecMode ExecMode = EExecMode::Unspecified; TQueryContent ScriptContent; - Ydb::TableStats::QueryStats ExecStats; - TVector ResultSetsMeta; + TExecStats ExecStats; + std::vector ResultSetsMeta; }; using TOperation::TOperation; diff --git a/ydb/public/sdk/cpp/client/ydb_query/stats.h b/ydb/public/sdk/cpp/client/ydb_query/stats.h index 3a62045a72f9..15c8a15a5134 100644 --- a/ydb/public/sdk/cpp/client/ydb_query/stats.h +++ b/ydb/public/sdk/cpp/client/ydb_query/stats.h @@ -22,6 +22,8 @@ class TExecStats { friend class NYdb::TProtoAccessor; public: + TExecStats() = default; + explicit TExecStats(Ydb::TableStats::QueryStats&& proto); explicit TExecStats(const Ydb::TableStats::QueryStats& proto);