diff --git a/ydb/core/kqp/ut/query/kqp_query_ut.cpp b/ydb/core/kqp/ut/query/kqp_query_ut.cpp index 5cccc5c3221b..4549a493ad7f 100644 --- a/ydb/core/kqp/ut/query/kqp_query_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_query_ut.cpp @@ -211,10 +211,13 @@ Y_UNIT_TEST_SUITE(KqpQuery) { UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString().c_str()); - UNIT_ASSERT_C(!result.GetMeta().empty(), "Query result meta is empty"); + auto stats = result.GetStats(); + UNIT_ASSERT(stats.has_value()); + + UNIT_ASSERT_C(stats->GetMeta().has_value(), "Query result meta is empty"); TStringStream in; - in << result.GetMeta(); + in << stats->GetMeta().value(); NJson::TJsonValue value; ReadJsonTree(&in, &value); @@ -234,12 +237,16 @@ Y_UNIT_TEST_SUITE(KqpQuery) { { auto settings = TExecDataQuerySettings(); + settings.CollectQueryStats(ECollectQueryStatsMode::Basic); auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString().c_str()); - UNIT_ASSERT_C(result.GetMeta().empty(), "Query result meta should be empty, but it's not"); + auto stats = result.GetStats(); + UNIT_ASSERT(stats.has_value()); + + UNIT_ASSERT_C(!stats->GetMeta().has_value(), "Query result meta should be empty, but it's not"); } } } diff --git a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h index 0f94a89eae71..9f4da9974c0c 100644 --- a/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h +++ b/ydb/public/sdk/cpp/include/ydb-cpp-sdk/client/table/table.h @@ -1163,8 +1163,10 @@ struct TStreamExecScanQuerySettings : public TRequestSettings= ECollectQueryStatsMode::Full to get QueryMeta in QueryStats + // Collect full query compilation diagnostics + FLUENT_SETTING_DEFAULT(bool, CollectFullDiagnostics, false); }; enum class EDataFormat { @@ -2036,8 +2038,6 @@ class TDataQueryResult : public TStatus { const std::string GetQueryPlan() const; - const std::string GetMeta() const; - private: std::optional Transaction_; std::vector ResultSets_; @@ -2110,6 +2110,11 @@ class TScanQueryPart : public TStreamPartStatus { const TQueryStats& GetQueryStats() const { return *QueryStats_; } TQueryStats ExtractQueryStats() { return std::move(*QueryStats_); } + // Deprecated. Use GetMeta() of TQueryStats + bool HasDiagnostics() const { return FakeDiagnostics_.has_value(); } + const std::string& GetDiagnostics() const { return *FakeDiagnostics_; } + std::string&& ExtractDiagnostics() { return std::move(*FakeDiagnostics_); } + TScanQueryPart(TStatus&& status) : TStreamPartStatus(std::move(status)) {} @@ -2128,6 +2133,7 @@ class TScanQueryPart : public TStreamPartStatus { private: std::optional ResultSet_; std::optional QueryStats_; + std::optional FakeDiagnostics_; }; using TAsyncScanQueryPart = NThreading::TFuture; diff --git a/ydb/public/sdk/cpp/src/client/table/table.cpp b/ydb/public/sdk/cpp/src/client/table/table.cpp index 5a41c6d6f877..4ebdbdd794d9 100644 --- a/ydb/public/sdk/cpp/src/client/table/table.cpp +++ b/ydb/public/sdk/cpp/src/client/table/table.cpp @@ -2220,14 +2220,6 @@ const std::string TDataQueryResult::GetQueryPlan() const { } } -const std::string TDataQueryResult::GetMeta() const { - if (QueryStats_.has_value()) { - return NYdb::TProtoAccessor::GetProto(*QueryStats_).query_meta(); - } else { - return ""; - } -} - //////////////////////////////////////////////////////////////////////////////// TBeginTransactionResult::TBeginTransactionResult(TStatus&& status, TTransaction transaction)