diff options
author | ditimizhev <[email protected]> | 2025-03-31 11:36:01 +0300 |
---|---|---|
committer | ditimizhev <[email protected]> | 2025-03-31 11:47:59 +0300 |
commit | 8b6fc14354f419cb8f0f71a4160b045c4ed37ab4 (patch) | |
tree | 8661db17c3e89288b642868d0d9ab040a1c8fe22 /yql/essentials/sql | |
parent | 85508809abdcad8b11787cbef5c73ca72c4a1e52 (diff) |
Error for batch operations with RETURNING
commit_hash:23ea6a6a3224e161a1998aceb2162dfe84744831
Diffstat (limited to 'yql/essentials/sql')
-rw-r--r-- | yql/essentials/sql/v1/sql_query.cpp | 20 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut_common.h | 12 |
2 files changed, 28 insertions, 4 deletions
diff --git a/yql/essentials/sql/v1/sql_query.cpp b/yql/essentials/sql/v1/sql_query.cpp index b59ae88c4b6..ec72610a244 100644 --- a/yql/essentials/sql/v1/sql_query.cpp +++ b/yql/essentials/sql/v1/sql_query.cpp @@ -3521,14 +3521,20 @@ TNodePtr TSqlQuery::Build(const TRule_delete_stmt& stmt) { TSourcePtr source = BuildTableSource(Ctx.Pos(), table); + const bool isBatch = stmt.HasBlock1(); TNodePtr options = nullptr; + if (stmt.HasBlock6()) { + if (isBatch) { + Ctx.Error(GetPos(stmt.GetToken2())) + << "BATCH DELETE is unsupported with RETURNING"; + return nullptr; + } + options = ReturningList(stmt.GetBlock6().GetRule_returning_columns_list1()); options = options->Y(options); } - const bool isBatch = stmt.HasBlock1(); - if (stmt.HasBlock5()) { switch (stmt.GetBlock5().Alt_case()) { case TRule_delete_stmt_TBlock5::kAlt1: { @@ -3585,14 +3591,20 @@ TNodePtr TSqlQuery::Build(const TRule_update_stmt& stmt) { return nullptr; } + const bool isBatch = stmt.HasBlock1(); TNodePtr options = nullptr; + if (stmt.HasBlock5()) { + if (isBatch) { + Ctx.Error(GetPos(stmt.GetToken2())) + << "BATCH UPDATE is unsupported with RETURNING"; + return nullptr; + } + options = ReturningList(stmt.GetBlock5().GetRule_returning_columns_list1()); options = options->Y(options); } - const bool isBatch = stmt.HasBlock1(); - switch (stmt.GetBlock4().Alt_case()) { case TRule_update_stmt_TBlock4::kAlt1: { const auto& alt = stmt.GetBlock4().GetAlt1(); diff --git a/yql/essentials/sql/v1/sql_ut_common.h b/yql/essentials/sql/v1/sql_ut_common.h index 36fe641ba63..55b6820ffc6 100644 --- a/yql/essentials/sql/v1/sql_ut_common.h +++ b/yql/essentials/sql/v1/sql_ut_common.h @@ -1475,6 +1475,12 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]); } + Y_UNIT_TEST(DeleteFromTableBatchReturning) { + NYql::TAstParseResult res = SqlToYql("batch delete from plato.Input returning *;", 10, "kikimr"); + UNIT_ASSERT(!res.Root); + UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:6: Error: BATCH DELETE is unsupported with RETURNING\n"); + } + Y_UNIT_TEST(DeleteFromTableOnValues) { NYql::TAstParseResult res = SqlToYql("delete from plato.Input on (key) values (1);", 10, "kikimr"); @@ -1559,6 +1565,12 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write"]); } + Y_UNIT_TEST(UpdateByValuesBatchReturning) { + NYql::TAstParseResult res = SqlToYql("batch update plato.Input set value = 'cool' where key = 200 returning key;", 10, "kikimr"); + UNIT_ASSERT(!res.Root); + UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:1:6: Error: BATCH UPDATE is unsupported with RETURNING\n"); + } + 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); |