@@ -39,6 +39,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
3939 TString Syntax;
4040 TString UserToken;
4141 bool IsBase64Encode;
42+ TString TransactionMode;
4243
4344 enum ESchemaType {
4445 Classic,
@@ -83,6 +84,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
8384 TString schemaStr = params.Get (" schema" );
8485 Schema = StringToSchemaType (schemaStr);
8586 Syntax = params.Get (" syntax" );
87+ TransactionMode = params.Get (" transaction_mode" );
8688 Direct = FromStringWithDefault<bool >(params.Get (" direct" ), Direct);
8789 IsBase64Encode = FromStringWithDefault<bool >(params.Get (" base64" ), true );
8890 }
@@ -97,6 +99,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
9799 Stats = Stats.empty () ? requestData[" stats" ].GetStringSafe ({}) : Stats;
98100 Action = Action.empty () ? requestData[" action" ].GetStringSafe ({}) : Action;
99101 Syntax = Syntax.empty () ? requestData[" syntax" ].GetStringSafe ({}) : Syntax;
102+ TransactionMode = TransactionMode.empty () ? requestData[" transaction_mode" ].GetStringSafe ({}) : TransactionMode;
100103 }
101104 }
102105
@@ -161,6 +164,22 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
161164 }
162165 }
163166
167+ void SetTransactionMode (NKikimrKqp::TQueryRequest& request) {
168+ if (TransactionMode == " serializable-read-write" ) {
169+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
170+ request.mutable_txcontrol ()->set_commit_tx (true );
171+ } else if (TransactionMode == " online-read-only" ) {
172+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_online_read_only ();
173+ request.mutable_txcontrol ()->set_commit_tx (true );
174+ } else if (TransactionMode == " stale-read-only" ) {
175+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_stale_read_only ();
176+ request.mutable_txcontrol ()->set_commit_tx (true );
177+ } else if (TransactionMode == " snapshot-read-only" ) {
178+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_snapshot_read_only ();
179+ request.mutable_txcontrol ()->set_commit_tx (true );
180+ }
181+ }
182+
164183 void SendKpqProxyRequest () {
165184 if (MadeKqpProxyRequest) {
166185 return ;
@@ -176,9 +195,8 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
176195 } else if (Action == " execute-query" ) {
177196 request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
178197 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
179- request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
180- request.mutable_txcontrol ()->set_commit_tx (true );
181198 request.SetKeepSession (false );
199+ SetTransactionMode (request);
182200 } else if (Action == " explain-query" ) {
183201 request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
184202 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
@@ -190,9 +208,8 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
190208 } else if (Action == " execute-data" ) {
191209 request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
192210 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_DML);
193- request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
194- request.mutable_txcontrol ()->set_commit_tx (true );
195211 request.SetKeepSession (false );
212+ SetTransactionMode (request);
196213 } else if (Action == " explain" || Action == " explain-ast" || Action == " explain-data" ) {
197214 request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
198215 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_DML);
@@ -634,6 +651,7 @@ struct TJsonRequestParameters<TJsonQuery> {
634651 {"name":"schema","in":"query","description":"result format schema (classic, modern, ydb, multi)","required":false,"type":"string"},
635652 {"name":"stats","in":"query","description":"return stats (profile, full)","required":false,"type":"string"},
636653 {"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"},
654+ {"name":"transaction_mode","in":"query","description":"transaction mode (serializable-read-write, online-read-only, stale-read-only, snapshot-read-only)","required":false,"type":"string"},
637655 {"name":"base64","in":"query","description":"return strings using base64 encoding","required":false,"type":"string"},
638656 {"name":"timeout","in":"query","description":"timeout in ms","required":false,"type":"integer"}])___" ;
639657 }
0 commit comments