@@ -39,6 +39,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
39
39
TString Stats;
40
40
TString Syntax;
41
41
TString QueryId;
42
+ TString TransactionMode;
42
43
bool Direct = false ;
43
44
bool IsBase64Encode = true ;
44
45
@@ -82,6 +83,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
82
83
Schema = StringToSchemaType (schemaStr);
83
84
Syntax = params.Get (" syntax" );
84
85
QueryId = params.Get (" query_id" );
86
+ TransactionMode = params.Get (" transaction_mode" );
85
87
Direct = FromStringWithDefault<bool >(params.Get (" direct" ), Direct);
86
88
IsBase64Encode = FromStringWithDefault<bool >(params.Get (" base64" ), true );
87
89
}
@@ -97,6 +99,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
97
99
Action = Action.empty () ? requestData[" action" ].GetStringSafe ({}) : Action;
98
100
Syntax = Syntax.empty () ? requestData[" syntax" ].GetStringSafe ({}) : Syntax;
99
101
QueryId = QueryId.empty () ? requestData[" query_id" ].GetStringSafe ({}) : QueryId;
102
+ TransactionMode = TransactionMode.empty () ? requestData[" transaction_mode" ].GetStringSafe ({}) : TransactionMode;
100
103
}
101
104
return success;
102
105
}
@@ -202,6 +205,22 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
202
205
Send (NKqp::MakeKqpProxyID (SelfId ().NodeId ()), event.release ());
203
206
}
204
207
208
+ void SetTransactionMode (NKikimrKqp::TQueryRequest& request) {
209
+ if (TransactionMode == " serializable-read-write" ) {
210
+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
211
+ request.mutable_txcontrol ()->set_commit_tx (true );
212
+ } else if (TransactionMode == " online-read-only" ) {
213
+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_online_read_only ();
214
+ request.mutable_txcontrol ()->set_commit_tx (true );
215
+ } else if (TransactionMode == " stale-read-only" ) {
216
+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_stale_read_only ();
217
+ request.mutable_txcontrol ()->set_commit_tx (true );
218
+ } else if (TransactionMode == " snapshot-read-only" ) {
219
+ request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_snapshot_read_only ();
220
+ request.mutable_txcontrol ()->set_commit_tx (true );
221
+ }
222
+ }
223
+
205
224
void HandleReply (NKqp::TEvKqp::TEvCreateSessionResponse::TPtr& ev) {
206
225
if (ev->Get ()->Record .GetYdbStatus () != Ydb::StatusIds::SUCCESS) {
207
226
return ReplyAndPassAway (
@@ -236,6 +255,7 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
236
255
request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
237
256
request.SetType (NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
238
257
request.SetKeepSession (false );
258
+ SetTransactionMode (request);
239
259
} else if (Action == " explain-query" ) {
240
260
request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
241
261
request.SetType (NKikimrKqp::QUERY_TYPE_SQL_GENERIC_QUERY);
@@ -247,9 +267,8 @@ class TJsonQuery : public TViewerPipeClient<TJsonQuery> {
247
267
} else if (Action == " execute-data" ) {
248
268
request.SetAction (NKikimrKqp::QUERY_ACTION_EXECUTE);
249
269
request.SetType (NKikimrKqp::QUERY_TYPE_SQL_DML);
250
- request.mutable_txcontrol ()->mutable_begin_tx ()->mutable_serializable_read_write ();
251
- request.mutable_txcontrol ()->set_commit_tx (true );
252
270
request.SetKeepSession (false );
271
+ SetTransactionMode (request);
253
272
} else if (Action == " explain" || Action == " explain-ast" || Action == " explain-data" ) {
254
273
request.SetAction (NKikimrKqp::QUERY_ACTION_EXPLAIN);
255
274
request.SetType (NKikimrKqp::QUERY_TYPE_SQL_DML);
@@ -685,6 +704,17 @@ YAML::Node TJsonRequestSwagger<TJsonQuery>::GetSwagger() {
685
704
type: string
686
705
enum: [profile, full]
687
706
required: false
707
+ - name: transaction_mode
708
+ in: query
709
+ description: >
710
+ transaction mode:
711
+ * `serializable-read-write`
712
+ * `online-read-only`
713
+ * `stale-read-only`
714
+ * `snapshot-read-only`
715
+ type: string
716
+ enum: [serializable-read-write, online-read-only, stale-read-only, snapshot-read-only]
717
+ required: false
688
718
- name: direct
689
719
in: query
690
720
description: force processing query on current node
0 commit comments