Skip to content

Commit 736a48a

Browse files
json query transaction mode (#5574) - merge stable-24-2 (#6131)
1 parent dfc8e0f commit 736a48a

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

ydb/core/viewer/json_query.h

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)