summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcherednik <[email protected]>2023-03-10 19:02:09 +0300
committerdcherednik <[email protected]>2023-03-10 19:02:09 +0300
commit2785c5b6edb6c5579e99cdb0e60c14e3f989757d (patch)
treebaed235594d24642b15536ae0b85523bd9f45398
parentcf307609f2783ffa591d781c73257b9492020714 (diff)
Do not use TOperationId to format queryId string.
-rw-r--r--ydb/core/grpc_services/rpc_execute_data_query.cpp6
-rw-r--r--ydb/core/grpc_services/rpc_prepare_data_query.cpp7
-rw-r--r--ydb/public/lib/operation_id/operation_id.cpp5
-rw-r--r--ydb/public/lib/operation_id/operation_id.h2
-rw-r--r--ydb/public/lib/operation_id/operation_id_ut.cpp31
5 files changed, 41 insertions, 10 deletions
diff --git a/ydb/core/grpc_services/rpc_execute_data_query.cpp b/ydb/core/grpc_services/rpc_execute_data_query.cpp
index b87e7e1934c..1f9cd9b5ee6 100644
--- a/ydb/core/grpc_services/rpc_execute_data_query.cpp
+++ b/ydb/core/grpc_services/rpc_execute_data_query.cpp
@@ -186,10 +186,8 @@ public:
}
if (!kqpResponse.GetPreparedQuery().empty()) {
auto& queryMeta = *queryResult->mutable_query_meta();
- Ydb::TOperationId opId;
- opId.SetKind(TOperationId::PREPARED_QUERY_ID);
- AddOptionalValue(opId, "id", kqpResponse.GetPreparedQuery());
- queryMeta.set_id(ProtoToString(opId));
+
+ queryMeta.set_id(FormatPreparedQueryIdCompat(kqpResponse.GetPreparedQuery()));
const auto& queryParameters = kqpResponse.GetQueryParameters();
for (const auto& queryParameter: queryParameters) {
diff --git a/ydb/core/grpc_services/rpc_prepare_data_query.cpp b/ydb/core/grpc_services/rpc_prepare_data_query.cpp
index 042b1af2cca..44bef062c7a 100644
--- a/ydb/core/grpc_services/rpc_prepare_data_query.cpp
+++ b/ydb/core/grpc_services/rpc_prepare_data_query.cpp
@@ -91,13 +91,8 @@ public:
const auto& issueMessage = kqpResponse.GetQueryIssues();
const auto& queryParameters = kqpResponse.GetQueryParameters();
- Ydb::TOperationId opId;
- opId.SetKind(TOperationId::PREPARED_QUERY_ID);
-
- AddOptionalValue(opId, "id", queryId);
-
Ydb::Table::PrepareQueryResult queryResult;
- queryResult.set_query_id(ProtoToString(opId));
+ queryResult.set_query_id(FormatPreparedQueryIdCompat(queryId));
for (const auto& queryParameter: queryParameters) {
Ydb::Type parameterType;
try {
diff --git a/ydb/public/lib/operation_id/operation_id.cpp b/ydb/public/lib/operation_id/operation_id.cpp
index 9d488114e2c..ca6547c63b2 100644
--- a/ydb/public/lib/operation_id/operation_id.cpp
+++ b/ydb/public/lib/operation_id/operation_id.cpp
@@ -13,6 +13,11 @@ namespace NOperationId {
using namespace NUri;
+TString FormatPreparedQueryIdCompat(const TString& in) {
+ static const TString prefix = "ydb://preparedqueryid/4?id=";
+ return prefix + in;
+}
+
TString ProtoToString(const Ydb::TOperationId& proto) {
using namespace ::google::protobuf;
const Reflection& reflection = *proto.GetReflection();
diff --git a/ydb/public/lib/operation_id/operation_id.h b/ydb/public/lib/operation_id/operation_id.h
index 23f91140d16..5a2032ef306 100644
--- a/ydb/public/lib/operation_id/operation_id.h
+++ b/ydb/public/lib/operation_id/operation_id.h
@@ -25,5 +25,7 @@ void AddOptionalValue(Ydb::TOperationId& proto, const TString& key, const TStrin
void AddOptionalValue(Ydb::TOperationId& proto, const TString& key, const char* value, size_t size);
Ydb::TOperationId::EKind ParseKind(const TStringBuf value);
+TString FormatPreparedQueryIdCompat(const TString& str);
+
} // namespace NOperationId
} // namespace NKikimr
diff --git a/ydb/public/lib/operation_id/operation_id_ut.cpp b/ydb/public/lib/operation_id/operation_id_ut.cpp
index 64fbedce4bf..4c5978a37af 100644
--- a/ydb/public/lib/operation_id/operation_id_ut.cpp
+++ b/ydb/public/lib/operation_id/operation_id_ut.cpp
@@ -7,6 +7,8 @@ namespace NKikimr {
namespace NOperationId {
Y_UNIT_TEST_SUITE(OperationIdTest) {
+ const TString PreparedQueryId = "9d629c27-2c3036b3-4b180476-64435bca";
+
Y_UNIT_TEST(ConvertKindOnly) {
Ydb::TOperationId proto;
proto.SetKind(Ydb::TOperationId::OPERATION_DDL);
@@ -17,6 +19,35 @@ Y_UNIT_TEST_SUITE(OperationIdTest) {
UNIT_ASSERT_EQUAL(newProto.DataSize(), 0);
}
+ Y_UNIT_TEST(PreparedQueryIdCompatibleFormatter) {
+ Ydb::TOperationId opId;
+ opId.SetKind(Ydb::TOperationId::PREPARED_QUERY_ID);
+ AddOptionalValue(opId, "id", PreparedQueryId);
+ auto result = ProtoToString(opId);
+ UNIT_ASSERT_VALUES_EQUAL(FormatPreparedQueryIdCompat(PreparedQueryId), result);
+ }
+#if 0
+ Y_UNIT_TEST(PreparedQueryIdCompatibleFormatterPerf) {
+ ui64 x = 0;
+ for (int i = 0; i < 10000000; i++) {
+ auto result = FormatPreparedQueryIdCompat(PreparedQueryId);
+ x += result.size();
+ }
+ Cerr << x << Endl;
+ }
+
+ Y_UNIT_TEST(PreparedQueryIdOldFormatterPerf) {
+ ui64 x = 0;
+ for (int i = 0; i < 10000000; i++) {
+ Ydb::TOperationId opId;
+ opId.SetKind(Ydb::TOperationId::PREPARED_QUERY_ID);
+ AddOptionalValue(opId, "id", PreparedQueryId);
+ auto result = ProtoToString(opId);
+ x += result.size();
+ }
+ Cerr << x << Endl;
+ }
+#endif
Y_UNIT_TEST(ConvertKindAndValues) {
Ydb::TOperationId proto;
proto.SetKind(Ydb::TOperationId::OPERATION_DDL);