From f790bd102c612f36e3817e99537eb18a2070aa1b Mon Sep 17 00:00:00 2001 From: Andrei Rykov Date: Fri, 5 Jul 2024 00:13:35 +0200 Subject: [PATCH] json query transaction mode (#5574) - merge stable-24-2 (#6131) --- ydb/core/viewer/json_query.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/ydb/core/viewer/json_query.h b/ydb/core/viewer/json_query.h index c8432cee2e34..42545a7a2fc3 100644 --- a/ydb/core/viewer/json_query.h +++ b/ydb/core/viewer/json_query.h @@ -39,6 +39,7 @@ class TJsonQuery : public TViewerPipeClient { TString Syntax; TString UserToken; bool IsBase64Encode; + TString TransactionMode; enum ESchemaType { Classic, @@ -83,6 +84,7 @@ class TJsonQuery : public TViewerPipeClient { TString schemaStr = params.Get("schema"); Schema = StringToSchemaType(schemaStr); Syntax = params.Get("syntax"); + TransactionMode = params.Get("transaction_mode"); Direct = FromStringWithDefault(params.Get("direct"), Direct); IsBase64Encode = FromStringWithDefault(params.Get("base64"), true); } @@ -97,6 +99,7 @@ class TJsonQuery : public TViewerPipeClient { Stats = Stats.empty() ? requestData["stats"].GetStringSafe({}) : Stats; Action = Action.empty() ? requestData["action"].GetStringSafe({}) : Action; Syntax = Syntax.empty() ? requestData["syntax"].GetStringSafe({}) : Syntax; + TransactionMode = TransactionMode.empty() ? requestData["transaction_mode"].GetStringSafe({}) : TransactionMode; } } @@ -161,6 +164,22 @@ class TJsonQuery : public TViewerPipeClient { } } + void SetTransactionMode(NKikimrKqp::TQueryRequest& request) { + if (TransactionMode == "serializable-read-write") { + request.mutable_txcontrol()->mutable_begin_tx()->mutable_serializable_read_write(); + request.mutable_txcontrol()->set_commit_tx(true); + } else if (TransactionMode == "online-read-only") { + request.mutable_txcontrol()->mutable_begin_tx()->mutable_online_read_only(); + request.mutable_txcontrol()->set_commit_tx(true); + } else if (TransactionMode == "stale-read-only") { + request.mutable_txcontrol()->mutable_begin_tx()->mutable_stale_read_only(); + request.mutable_txcontrol()->set_commit_tx(true); + } else if (TransactionMode == "snapshot-read-only") { + request.mutable_txcontrol()->mutable_begin_tx()->mutable_snapshot_read_only(); + request.mutable_txcontrol()->set_commit_tx(true); + } + } + void SendKpqProxyRequest() { if (MadeKqpProxyRequest) { return; @@ -176,9 +195,8 @@ class TJsonQuery : public TViewerPipeClient { } else if (Action == "execute-query") { request.SetAction(NKikimrKqp::QUERY_ACTION_EXECUTE); request.SetType(NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY); - request.mutable_txcontrol()->mutable_begin_tx()->mutable_serializable_read_write(); - request.mutable_txcontrol()->set_commit_tx(true); request.SetKeepSession(false); + SetTransactionMode(request); } else if (Action == "explain-query") { request.SetAction(NKikimrKqp::QUERY_ACTION_EXPLAIN); request.SetType(NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY); @@ -190,9 +208,8 @@ class TJsonQuery : public TViewerPipeClient { } else if (Action == "execute-data") { request.SetAction(NKikimrKqp::QUERY_ACTION_EXECUTE); request.SetType(NKikimrKqp::QUERY_TYPE_SQL_DML); - request.mutable_txcontrol()->mutable_begin_tx()->mutable_serializable_read_write(); - request.mutable_txcontrol()->set_commit_tx(true); request.SetKeepSession(false); + SetTransactionMode(request); } else if (Action == "explain" || Action == "explain-ast" || Action == "explain-data") { request.SetAction(NKikimrKqp::QUERY_ACTION_EXPLAIN); request.SetType(NKikimrKqp::QUERY_TYPE_SQL_DML); @@ -634,6 +651,7 @@ struct TJsonRequestParameters { {"name":"schema","in":"query","description":"result format schema (classic, modern, ydb, multi)","required":false,"type":"string"}, {"name":"stats","in":"query","description":"return stats (profile, full)","required":false,"type":"string"}, {"name":"action","in":"query","description":"execute method (execute-scan, execute-script, execute-query, execute-data,explain-ast, explain-scan, explain-script, explain-query, explain-data)","required":false,"type":"string"}, + {"name":"transaction_mode","in":"query","description":"transaction mode (serializable-read-write, online-read-only, stale-read-only, snapshot-read-only)","required":false,"type":"string"}, {"name":"base64","in":"query","description":"return strings using base64 encoding","required":false,"type":"string"}, {"name":"timeout","in":"query","description":"timeout in ms","required":false,"type":"integer"}])___"; }