@@ -2159,6 +2159,77 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
21592159 TKikimrRunner kikimr (serverSettings);
21602160 auto db = kikimr.GetQueryClient ();
21612161
2162+ {
2163+ // DDl + DML with explicit transaction
2164+ auto result = db.ExecuteQuery (R"(
2165+ CREATE TABLE TestDdlDml1 (
2166+ Key Uint64,
2167+ Value1 String,
2168+ Value2 String,
2169+ PRIMARY KEY (Key)
2170+ );
2171+ UPSERT INTO TestDdlDml1 (Key, Value1, Value2) VALUES (1, "1", "2");
2172+ SELECT * FROM TestDdlDml1;
2173+ ALTER TABLE TestDdlDml1 DROP COLUMN Value2;
2174+ UPSERT INTO TestDdlDml1 (Key, Value1) VALUES (2, "2");
2175+ SELECT * FROM TestDdlDml1;
2176+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2177+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::GENERIC_ERROR, result.GetIssues ().ToString ());
2178+ UNIT_ASSERT (result.GetIssues ().ToOneLineString ().Contains (" Queries with mixed data and scheme operations are not supported." ));
2179+ }
2180+
2181+ {
2182+ // DDl + DML with implicit transaction
2183+ auto result = db.ExecuteQuery (R"(
2184+ CREATE TABLE TestDdlDml2 (
2185+ Key Uint64,
2186+ Value1 String,
2187+ Value2 String,
2188+ PRIMARY KEY (Key)
2189+ );
2190+ UPSERT INTO TestDdlDml2 (Key, Value1, Value2) VALUES (1, "1", "2");
2191+ SELECT * FROM TestDdlDml2;
2192+ ALTER TABLE TestDdlDml2 DROP COLUMN Value2;
2193+ UPSERT INTO TestDdlDml2 (Key, Value1) VALUES (2, "2");
2194+ SELECT * FROM TestDdlDml2;
2195+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2196+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2197+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2198+ CompareYson (R"( [[[1u];["1"];["2"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2199+ CompareYson (R"( [[[1u];["1"]];[[2u];["2"]]])" , FormatResultSetYson (result.GetResultSet (1 )));
2200+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2201+
2202+ result = db.ExecuteQuery (R"(
2203+ SELECT * FROM TestDdlDml2;
2204+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2205+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2206+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2207+ CompareYson (R"( [[[1u];["1"]];[[2u];["2"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2208+
2209+ result = db.ExecuteQuery (R"(
2210+ CREATE TABLE TestDdlDml4 (
2211+ Key Uint64,
2212+ Value1 String,
2213+ Value2 String,
2214+ PRIMARY KEY (Key)
2215+ );
2216+ UPSERT INTO TestDdlDml4 (Key, Value1, Value2) VALUES (1, "1", "2");
2217+ SELECT * FROM TestDdlDml4;
2218+ ALTER TABLE TestDdlDml4 DROP COLUMN Value2;
2219+ UPSERT INTO TestDdlDml4 (Key, Value1) VALUES (2, "2");
2220+ SELECT * FROM TestDdlDml5;
2221+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2222+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SCHEME_ERROR, result.GetIssues ().ToString ());
2223+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2224+
2225+ result = db.ExecuteQuery (R"(
2226+ SELECT * FROM TestDdlDml4;
2227+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2228+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2229+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2230+ CompareYson (R"( [])" , FormatResultSetYson (result.GetResultSet (0 )));
2231+ }
2232+
21622233 {
21632234 // Base test with ddl and dml statements
21642235 auto result = db.ExecuteQuery (R"(
@@ -2228,13 +2299,21 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
22282299 {
22292300 // Test with query with error
22302301 auto result = db.ExecuteQuery (R"(
2231- UPSERT INTO TestDdl2 (Key, Value) VALUES (1, "One");
2302+ SELECT * FROM TestDdl2;
2303+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2304+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2305+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2306+ CompareYson (R"( [[[1u];["One"]];[[2u];["Two"]];[[3u];["Three"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2307+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2308+
2309+ result = db.ExecuteQuery (R"(
2310+ UPSERT INTO TestDdl2 (Key, Value) VALUES (4, "Four");
22322311 CREATE TABLE TestDdl3 (
22332312 Key Uint64,
22342313 Value String,
22352314 PRIMARY KEY (Key)
22362315 );
2237- UPSERT INTO TestDdl2 (Key, Value) VALUES (4 , "Four ");
2316+ UPSERT INTO TestDdl2 (Key, Value) VALUES (5 , "Five ");
22382317 CREATE TABLE TestDdl2 (
22392318 Key Uint64,
22402319 Value String,
@@ -2245,18 +2324,32 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
22452324 Value String,
22462325 PRIMARY KEY (Key)
22472326 );
2248- UPSERT INTO TestDdl1 (Key, Value) VALUES (3, "Three");
22492327 )" , TTxControl::NoTx ()).ExtractValueSync ();
22502328 UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::GENERIC_ERROR, result.GetIssues ().ToString ());
22512329 UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2330+ UNIT_ASSERT (result.GetIssues ().ToOneLineString ().Contains (" Check failed: path: '/Root/TestDdl2', error: path exist" ));
22522331
22532332 result = db.ExecuteQuery (R"(
22542333 SELECT * FROM TestDdl2;
22552334 )" , TTxControl::NoTx ()).ExtractValueSync ();
22562335 UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
22572336 UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2258- CompareYson (R"( [[[1u];["One"]];[[2u];["Two"]];[[3u];["Three"]];[[4u];["Four"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2337+ CompareYson (R"( [[[1u];["One"]];[[2u];["Two"]];[[3u];["Three"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2338+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2339+
2340+ result = db.ExecuteQuery (R"(
2341+ SELECT * FROM TestDdl3;
2342+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2343+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2344+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2345+ CompareYson (R"( [])" , FormatResultSetYson (result.GetResultSet (0 )));
22592346 UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2347+
2348+ result = db.ExecuteQuery (R"(
2349+ SELECT * FROM TestDdl4;
2350+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2351+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SCHEME_ERROR, result.GetIssues ().ToString ());
2352+ UNIT_ASSERT (result.GetIssues ().ToOneLineString ().Contains (" Cannot find table 'db.[/Root/TestDdl4]'" ));
22602353 }
22612354
22622355 {
@@ -2329,7 +2422,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
23292422 )" , TTxControl::NoTx ()).ExtractValueSync ();
23302423 UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
23312424 UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2332- CompareYson (R"( [[[1u];[1u]];[[2u];[2u]] ])" , FormatResultSetYson (result.GetResultSet (0 )));
2425+ CompareYson (R"( [[[1u];[1u]]])" , FormatResultSetYson (result.GetResultSet (0 )));
23332426
23342427 result = db.ExecuteQuery (R"(
23352428 CREATE TABLE TestDdl5 (
@@ -2348,7 +2441,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
23482441 )" , TTxControl::NoTx ()).ExtractValueSync ();
23492442 UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
23502443 UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2351- CompareYson (R"( [[[1u];[1u]] ])" , FormatResultSetYson (result.GetResultSet (0 )));
2444+ CompareYson (R"( [])" , FormatResultSetYson (result.GetResultSet (0 )));
23522445 }
23532446 }
23542447
0 commit comments