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