@@ -39,6 +39,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
3939 TString Stats;
4040 TString Syntax;
4141 TString QueryId;
42+ TString TransactionMode;
4243 bool Direct = false ;
4344 bool IsBase64Encode = true ;
4445
@@ -82,6 +83,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
8283 Schema = StringToSchemaType (schemaStr);
8384 Syntax = params.Get (" syntax" );
8485 QueryId = params.Get (" query_id" );
86+ TransactionMode = params.Get (" transaction_mode" );
8587 Direct = FromStringWithDefault<bool >(params.Get (" direct" ), Direct);
8688 IsBase64Encode = FromStringWithDefault<bool >(params.Get (" base64" ), true );
8789 }
@@ -97,6 +99,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
9799 Action = Action.empty () ? requestData[" action" ].GetStringSafe ({}) : Action;
98100 Syntax = Syntax.empty () ? requestData[" syntax" ].GetStringSafe ({}) : Syntax;
99101 QueryId = QueryId.empty () ? requestData[" query_id" ].GetStringSafe ({}) : QueryId;
102+ TransactionMode = TransactionMode.empty () ? requestData[" transaction_mode" ].GetStringSafe ({}) : TransactionMode;
100103 }
101104 return success;
102105 }
@@ -231,8 +234,6 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
231234 } else if (Action == " execute-query" ) {
232235 request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
233236 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
234- request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
235- request.mutable_txcontrol ()->set_commit_tx (true );
236237 request.SetKeepSession (false );
237238 } else if (Action == " explain-query" ) {
238239 request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
@@ -245,8 +246,6 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
245246 } else if (Action == " execute-data" ) {
246247 request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
247248 request.SetType (NKikimrKqp::QUERY_TYPE_SQL_DML);
248- request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
249- request.mutable_txcontrol ()->set_commit_tx (true );
250249 request.SetKeepSession (false );
251250 } else if (Action == " explain" || Action == " explain-ast" || Action == " explain-data" ) {
252251 request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
@@ -270,6 +269,19 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
270269 } else if (Syntax == " pg" ) {
271270 request.SetSyntax (Ydb::Query::Syntax::SYNTAX_PG);
272271 }
272+ if (TransactionMode == " online-read-only" ) {
273+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_online_read_only ();
274+ request.mutable_txcontrol ()->set_commit_tx (true );
275+ } else if (TransactionMode == " stale-read-only" ) {
276+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_stale_read_only ();
277+ request.mutable_txcontrol ()->set_commit_tx (true );
278+ } else if (TransactionMode == " snapshot-read-only" ) {
279+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_snapshot_read_only ();
280+ request.mutable_txcontrol ()->set_commit_tx (true );
281+ } else if (TransactionMode == " serializable-read-write" || Action == " execute-query" || Action == " execute-data" ) {
282+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
283+ request.mutable_txcontrol ()->set_commit_tx (true );
284+ }
273285 ActorIdToProto (SelfId (), event->Record .MutableRequestActorId ());
274286 Send (NKqp::MakeKqpProxyID (SelfId ().NodeId ()), event.Release ());
275287 BLOG_TRACE (" Query sent" );
@@ -664,6 +676,17 @@ YAML::Node TJsonRequestSwagger<TJsonQuery>::GetSwagger() {
664676 type: string
665677 enum: [profile, full]
666678 required: false
679+ - name: transaction_mode
680+ in: query
681+ description: >
682+ transaction mode:
683+ * `serializable-read-write`
684+ * `online-read-only`
685+ * `stale-read-only`
686+ * `snapshot-read-only`
687+ type: string
688+ enum: [serializable-read-write, online-read-only, stale-read-only, snapshot-read-only]
689+ required: false
667690 - name: direct
668691 in: query
669692 description: force processing query on current node
0 commit comments