summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_ut.cpp
diff options
context:
space:
mode:
authorditimizhev <[email protected]>2025-01-16 16:05:48 +0300
committerditimizhev <[email protected]>2025-01-16 16:30:54 +0300
commit7e86bcaf10a418760708b0be68e02abd715b745b (patch)
treea48b0c9efd485af31384bfaf60c8aada1f9ca3a8 /yql/essentials/sql/v1/sql_ut.cpp
parente812e2c1c25ae5339044634886773f66f443c061 (diff)
Add BATCH to update/delete stmts
Impl BATCH to UPDATE and DELETE stmts without ON for batch execution in YDB. commit_hash:426f8fae0635a8fec07e940e0f0dfba1974531bf
Diffstat (limited to 'yql/essentials/sql/v1/sql_ut.cpp')
-rw-r--r--yql/essentials/sql/v1/sql_ut.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/sql_ut.cpp b/yql/essentials/sql/v1/sql_ut.cpp
index efbed0e6653..e7b30928c32 100644
--- a/yql/essentials/sql/v1/sql_ut.cpp
+++ b/yql/essentials/sql/v1/sql_ut.cpp
@@ -1214,6 +1214,23 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]);
}
+ Y_UNIT_TEST(DeleteFromTableBatch) {
+ NYql::TAstParseResult res = SqlToYql("batch delete from plato.Input;", 10, "kikimr");
+ UNIT_ASSERT(res.Root);
+
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
+ if (word == "Write") {
+ UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("('mode 'delete)"));
+ UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("'('is_batch 'true)"));
+ }
+ };
+
+ TWordCountHive elementStat = {{TString("Write"), 0}};
+ VerifyProgram(res, elementStat, verifyLine);
+
+ UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]);
+ }
+
Y_UNIT_TEST(DeleteFromTableOnValues) {
NYql::TAstParseResult res = SqlToYql("delete from plato.Input on (key) values (1);",
10, "kikimr");
@@ -1248,6 +1265,13 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]);
}
+ Y_UNIT_TEST(DeleteFromTableOnBatch) {
+ NYql::TAstParseResult res = SqlToYql("batch delete from plato.Input on (key) values (1);",
+ 10, "kikimr");
+ UNIT_ASSERT(!res.Root);
+ UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:6: Error: BATCH DELETE is unsupported with ON\n");
+ }
+
Y_UNIT_TEST(UpdateByValues) {
NYql::TAstParseResult res = SqlToYql("update plato.Input set key = 777, value = 'cool' where key = 200;", 10, "kikimr");
UNIT_ASSERT(res.Root);
@@ -1274,6 +1298,23 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(1, elementStat["AsStruct"]);
}
+ Y_UNIT_TEST(UpdateByValuesBatch) {
+ NYql::TAstParseResult res = SqlToYql("batch update plato.Input set key = 777, value = 'cool' where key = 200;", 10, "kikimr");
+ UNIT_ASSERT(res.Root);
+
+ TVerifyLineFunc verifyLine = [](const TString& word, const TString& line) {
+ if (word == "Write") {
+ UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("('mode 'update)"));
+ UNIT_ASSERT_VALUES_UNEQUAL(TString::npos, line.find("'('is_batch 'true)"));
+ }
+ };
+
+ TWordCountHive elementStat = {{TString("Write"), 0}};
+ VerifyProgram(res, elementStat, verifyLine);
+
+ UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]);
+ }
+
Y_UNIT_TEST(UpdateByMultiValues) {
NYql::TAstParseResult res = SqlToYql("update plato.Input set (key, value, subkey) = ('2','ddd',':') where key = 200;", 10, "kikimr");
UNIT_ASSERT(res.Root);
@@ -1384,6 +1425,12 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]);
}
+ Y_UNIT_TEST(UpdateOnBatch) {
+ NYql::TAstParseResult res = SqlToYql("batch update plato.Input on (key, value) values (5, 'cool')", 10, "kikimr");
+ UNIT_ASSERT(!res.Root);
+ UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:6: Error: BATCH UPDATE is unsupported with ON\n");
+ }
+
Y_UNIT_TEST(UnionAllTest) {
NYql::TAstParseResult res = SqlToYql("PRAGMA DisableEmitUnionMerge; SELECT key FROM plato.Input UNION ALL select subkey FROM plato.Input;");
UNIT_ASSERT(res.Root);