@@ -2313,6 +2313,10 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2313
2313
ALTER TABLE TestDdlDml2 DROP COLUMN Value2;
2314
2314
UPSERT INTO TestDdlDml2 (Key, Value1) VALUES (2, "2");
2315
2315
SELECT * FROM TestDdlDml2;
2316
+ CREATE TABLE TestDdlDml33 (
2317
+ Key Uint64,
2318
+ PRIMARY KEY (Key)
2319
+ );
2316
2320
)" , TTxControl::NoTx ()).ExtractValueSync ();
2317
2321
UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2318
2322
UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
@@ -2327,6 +2331,13 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2327
2331
UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2328
2332
CompareYson (R"( [[[1u];["1"]];[[2u];["2"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2329
2333
2334
+ result = db.ExecuteQuery (R"(
2335
+ SELECT * FROM TestDdlDml33;
2336
+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2337
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2338
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2339
+ CompareYson (R"( [])" , FormatResultSetYson (result.GetResultSet (0 )));
2340
+
2330
2341
result = db.ExecuteQuery (R"(
2331
2342
CREATE TABLE TestDdlDml4 (
2332
2343
Key Uint64,
@@ -2621,6 +2632,177 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2621
2632
}
2622
2633
}
2623
2634
2635
+ Y_UNIT_TEST (CheckIsolationLevelFroPerStatementMode) {
2636
+ NKikimrConfig::TAppConfig appConfig;
2637
+ appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
2638
+ appConfig.MutableTableServiceConfig ()->SetEnableAstCache (true );
2639
+ appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
2640
+ auto setting = NKikimrKqp::TKqpSetting ();
2641
+ auto serverSettings = TKikimrSettings ()
2642
+ .SetAppConfig (appConfig)
2643
+ .SetKqpSettings ({setting});
2644
+
2645
+ TKikimrRunner kikimr (serverSettings);
2646
+ auto db = kikimr.GetQueryClient ();
2647
+ auto tableClient = kikimr.GetTableClient ();
2648
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
2649
+
2650
+ {
2651
+ // 1 ddl statement
2652
+ auto result = db.ExecuteQuery (R"(
2653
+ CREATE TABLE Test1 (
2654
+ Key Uint64,
2655
+ Value1 String,
2656
+ Value2 String,
2657
+ PRIMARY KEY (Key)
2658
+ );
2659
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2660
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2661
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2662
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2663
+
2664
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test1" ).GetValueSync ();
2665
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2666
+ }
2667
+
2668
+ {
2669
+ // 2 ddl statements
2670
+ auto result = db.ExecuteQuery (R"(
2671
+ CREATE TABLE Test2 (
2672
+ Key Uint64,
2673
+ Value1 String,
2674
+ Value2 String,
2675
+ PRIMARY KEY (Key)
2676
+ );
2677
+ CREATE TABLE Test3 (
2678
+ Key Uint64,
2679
+ Value1 String,
2680
+ Value2 String,
2681
+ PRIMARY KEY (Key)
2682
+ );
2683
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2684
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2685
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2686
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2687
+
2688
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test2" ).GetValueSync ();
2689
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2690
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test3" ).GetValueSync ();
2691
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2692
+ }
2693
+
2694
+ {
2695
+ // 1 dml statement
2696
+ auto result = db.ExecuteQuery (R"(
2697
+ SELECT * FROM Test1;
2698
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2699
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2700
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2701
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2702
+ }
2703
+
2704
+ {
2705
+ // 2 dml statements
2706
+ auto result = db.ExecuteQuery (R"(
2707
+ SELECT * FROM Test2;
2708
+ SELECT * FROM Test3;
2709
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2710
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2711
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2712
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2713
+ }
2714
+
2715
+ {
2716
+ // 1 ddl 1 dml statements
2717
+ auto result = db.ExecuteQuery (R"(
2718
+ CREATE TABLE Test4 (
2719
+ Key Uint64,
2720
+ Value1 String,
2721
+ Value2 String,
2722
+ PRIMARY KEY (Key)
2723
+ );
2724
+ SELECT * FROM Test4;
2725
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2726
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2727
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2728
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2729
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test4" ).GetValueSync ();
2730
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2731
+ }
2732
+
2733
+ {
2734
+ // 1 dml 1 ddl statements
2735
+ auto result = db.ExecuteQuery (R"(
2736
+ SELECT * FROM Test4;
2737
+ CREATE TABLE Test5 (
2738
+ Key Uint64,
2739
+ Value1 String,
2740
+ Value2 String,
2741
+ PRIMARY KEY (Key)
2742
+ );
2743
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2744
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2745
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2746
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2747
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test5" ).GetValueSync ();
2748
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2749
+ }
2750
+
2751
+ {
2752
+ // 1 ddl 1 dml 1 ddl 1 dml statements
2753
+ auto result = db.ExecuteQuery (R"(
2754
+ CREATE TABLE Test6 (
2755
+ Key Uint64,
2756
+ Value1 String,
2757
+ Value2 String,
2758
+ PRIMARY KEY (Key)
2759
+ );
2760
+ SELECT * FROM Test6;
2761
+ CREATE TABLE Test7 (
2762
+ Key Uint64,
2763
+ Value1 String,
2764
+ Value2 String,
2765
+ PRIMARY KEY (Key)
2766
+ );
2767
+ SELECT * FROM Test7;
2768
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2769
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2770
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2771
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2772
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test6" ).GetValueSync ();
2773
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2774
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test7" ).GetValueSync ();
2775
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2776
+ }
2777
+
2778
+ {
2779
+ // 1 dml 1 ddl 1 dml 1 ddl statements
2780
+ auto result = db.ExecuteQuery (R"(
2781
+ SELECT * FROM Test7;
2782
+ CREATE TABLE Test8 (
2783
+ Key Uint64,
2784
+ Value1 String,
2785
+ Value2 String,
2786
+ PRIMARY KEY (Key)
2787
+ );
2788
+ SELECT * FROM Test8;
2789
+ CREATE TABLE Test9 (
2790
+ Key Uint64,
2791
+ Value1 String,
2792
+ Value2 String,
2793
+ PRIMARY KEY (Key)
2794
+ );
2795
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2796
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2797
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2798
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2799
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test8" ).GetValueSync ();
2800
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2801
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test9" ).GetValueSync ();
2802
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2803
+ }
2804
+ }
2805
+
2624
2806
Y_UNIT_TEST (TableSink_ReplaceFromSelectOlap) {
2625
2807
NKikimrConfig::TAppConfig appConfig;
2626
2808
appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
0 commit comments