From 155e8defbc359dc45d83bf9d2591364ecd406a89 Mon Sep 17 00:00:00 2001 From: Polina Volosnikova Date: Mon, 3 Jun 2024 11:54:04 +0000 Subject: [PATCH 1/2] add test for ddl with explicit transaction --- ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp index 4ecea856e88b..8d4a9d2dab08 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -2146,7 +2146,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { } } - Y_UNIT_TEST(Ddl_Dml) { + Y_UNIT_TEST(DdlWithExplicitTransaction) { NKikimrConfig::TAppConfig appConfig; appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); appConfig.MutableTableServiceConfig()->SetEnableAstCache(true); @@ -2160,7 +2160,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { auto db = kikimr.GetQueryClient(); { - // DDl + DML with explicit transaction + // DDl with explicit transaction auto result = db.ExecuteQuery(R"( CREATE TABLE TestDdlDml1 ( Key Uint64, @@ -2168,15 +2168,53 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { Value2 String, PRIMARY KEY (Key) ); - UPSERT INTO TestDdlDml1 (Key, Value1, Value2) VALUES (1, "1", "2"); - SELECT * FROM TestDdlDml1; - ALTER TABLE TestDdlDml1 DROP COLUMN Value2; - UPSERT INTO TestDdlDml1 (Key, Value1) VALUES (2, "2"); + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::PRECONDITION_FAILED, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetIssues().ToOneLineString().Contains("Scheme operations cannot be executed inside transaction")); + } + + { + // DDl with implicit transaction + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdlDml1 ( + Key Uint64, + Value1 String, + Value2 String, + PRIMARY KEY (Key) + ); + )", TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + // DDl + DML with explicit transaction + auto result = db.ExecuteQuery(R"( SELECT * FROM TestDdlDml1; + CREATE TABLE TestDdlDml2 ( + Key Uint64, + Value1 String, + Value2 String, + PRIMARY KEY (Key) + ); + SELECT * FROM TestDdlDml2; )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString()); UNIT_ASSERT(result.GetIssues().ToOneLineString().Contains("Queries with mixed data and scheme operations are not supported.")); } + } + + Y_UNIT_TEST(Ddl_Dml) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + appConfig.MutableTableServiceConfig()->SetEnableAstCache(true); + appConfig.MutableTableServiceConfig()->SetEnablePerStatementQueryExecution(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetQueryClient(); { // DDl + DML with implicit transaction From d12796895815d1804a5a38881c256e8c74c9e8f4 Mon Sep 17 00:00:00 2001 From: Polina Volosnikova Date: Mon, 3 Jun 2024 13:19:51 +0000 Subject: [PATCH 2/2] add case --- ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp index 8d4a9d2dab08..84d8f18ea014 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -2164,8 +2164,22 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { auto result = db.ExecuteQuery(R"( CREATE TABLE TestDdlDml1 ( Key Uint64, - Value1 String, - Value2 String, + PRIMARY KEY (Key) + ); + )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::PRECONDITION_FAILED, result.GetIssues().ToString()); + UNIT_ASSERT(result.GetIssues().ToOneLineString().Contains("Scheme operations cannot be executed inside transaction")); + } + + { + // DDl with explicit transaction + auto result = db.ExecuteQuery(R"( + CREATE TABLE TestDdlDml1 ( + Key Uint64, + PRIMARY KEY (Key) + ); + CREATE TABLE TestDdlDml2 ( + Key Uint64, PRIMARY KEY (Key) ); )", TTxControl::BeginTx().CommitTx()).ExtractValueSync(); @@ -2178,8 +2192,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { auto result = db.ExecuteQuery(R"( CREATE TABLE TestDdlDml1 ( Key Uint64, - Value1 String, - Value2 String, PRIMARY KEY (Key) ); )", TTxControl::NoTx()).ExtractValueSync(); @@ -2192,8 +2204,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { SELECT * FROM TestDdlDml1; CREATE TABLE TestDdlDml2 ( Key Uint64, - Value1 String, - Value2 String, PRIMARY KEY (Key) ); SELECT * FROM TestDdlDml2;