@@ -2356,6 +2356,10 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2356
2356
ALTER TABLE TestDdlDml2 DROP COLUMN Value2;
2357
2357
UPSERT INTO TestDdlDml2 (Key, Value1) VALUES (2, "2");
2358
2358
SELECT * FROM TestDdlDml2;
2359
+ CREATE TABLE TestDdlDml33 (
2360
+ Key Uint64,
2361
+ PRIMARY KEY (Key)
2362
+ );
2359
2363
)" , TTxControl::NoTx ()).ExtractValueSync ();
2360
2364
UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2361
2365
UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
@@ -2370,6 +2374,13 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2370
2374
UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2371
2375
CompareYson (R"( [[[1u];["1"]];[[2u];["2"]]])" , FormatResultSetYson (result.GetResultSet (0 )));
2372
2376
2377
+ result = db.ExecuteQuery (R"(
2378
+ SELECT * FROM TestDdlDml33;
2379
+ )" , TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2380
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2381
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2382
+ CompareYson (R"( [])" , FormatResultSetYson (result.GetResultSet (0 )));
2383
+
2373
2384
result = db.ExecuteQuery (R"(
2374
2385
CREATE TABLE TestDdlDml4 (
2375
2386
Key Uint64,
@@ -2745,6 +2756,177 @@ Y_UNIT_TEST_SUITE(KqpQueryService) {
2745
2756
}
2746
2757
}
2747
2758
2759
+ Y_UNIT_TEST (CheckIsolationLevelFroPerStatementMode) {
2760
+ NKikimrConfig::TAppConfig appConfig;
2761
+ appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
2762
+ appConfig.MutableTableServiceConfig ()->SetEnableAstCache (true );
2763
+ appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
2764
+ auto setting = NKikimrKqp::TKqpSetting ();
2765
+ auto serverSettings = TKikimrSettings ()
2766
+ .SetAppConfig (appConfig)
2767
+ .SetKqpSettings ({setting});
2768
+
2769
+ TKikimrRunner kikimr (serverSettings);
2770
+ auto db = kikimr.GetQueryClient ();
2771
+ auto tableClient = kikimr.GetTableClient ();
2772
+ auto session = tableClient.CreateSession ().GetValueSync ().GetSession ();
2773
+
2774
+ {
2775
+ // 1 ddl statement
2776
+ auto result = db.ExecuteQuery (R"(
2777
+ CREATE TABLE Test1 (
2778
+ Key Uint64,
2779
+ Value1 String,
2780
+ Value2 String,
2781
+ PRIMARY KEY (Key)
2782
+ );
2783
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2784
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2785
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2786
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2787
+
2788
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test1" ).GetValueSync ();
2789
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2790
+ }
2791
+
2792
+ {
2793
+ // 2 ddl statements
2794
+ auto result = db.ExecuteQuery (R"(
2795
+ CREATE TABLE Test2 (
2796
+ Key Uint64,
2797
+ Value1 String,
2798
+ Value2 String,
2799
+ PRIMARY KEY (Key)
2800
+ );
2801
+ CREATE TABLE Test3 (
2802
+ Key Uint64,
2803
+ Value1 String,
2804
+ Value2 String,
2805
+ PRIMARY KEY (Key)
2806
+ );
2807
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2808
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2809
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 0 );
2810
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2811
+
2812
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test2" ).GetValueSync ();
2813
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2814
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test3" ).GetValueSync ();
2815
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2816
+ }
2817
+
2818
+ {
2819
+ // 1 dml statement
2820
+ auto result = db.ExecuteQuery (R"(
2821
+ SELECT * FROM Test1;
2822
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2823
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2824
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2825
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2826
+ }
2827
+
2828
+ {
2829
+ // 2 dml statements
2830
+ auto result = db.ExecuteQuery (R"(
2831
+ SELECT * FROM Test2;
2832
+ SELECT * FROM Test3;
2833
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2834
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2835
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2836
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2837
+ }
2838
+
2839
+ {
2840
+ // 1 ddl 1 dml statements
2841
+ auto result = db.ExecuteQuery (R"(
2842
+ CREATE TABLE Test4 (
2843
+ Key Uint64,
2844
+ Value1 String,
2845
+ Value2 String,
2846
+ PRIMARY KEY (Key)
2847
+ );
2848
+ SELECT * FROM Test4;
2849
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2850
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2851
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2852
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2853
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test4" ).GetValueSync ();
2854
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2855
+ }
2856
+
2857
+ {
2858
+ // 1 dml 1 ddl statements
2859
+ auto result = db.ExecuteQuery (R"(
2860
+ SELECT * FROM Test4;
2861
+ CREATE TABLE Test5 (
2862
+ Key Uint64,
2863
+ Value1 String,
2864
+ Value2 String,
2865
+ PRIMARY KEY (Key)
2866
+ );
2867
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2868
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2869
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 1 );
2870
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2871
+ NYdb::NTable::TDescribeTableResult describe = session.DescribeTable (" /Root/Test5" ).GetValueSync ();
2872
+ UNIT_ASSERT_EQUAL (describe.GetStatus (), EStatus::SUCCESS);
2873
+ }
2874
+
2875
+ {
2876
+ // 1 ddl 1 dml 1 ddl 1 dml statements
2877
+ auto result = db.ExecuteQuery (R"(
2878
+ CREATE TABLE Test6 (
2879
+ Key Uint64,
2880
+ Value1 String,
2881
+ Value2 String,
2882
+ PRIMARY KEY (Key)
2883
+ );
2884
+ SELECT * FROM Test6;
2885
+ CREATE TABLE Test7 (
2886
+ Key Uint64,
2887
+ Value1 String,
2888
+ Value2 String,
2889
+ PRIMARY KEY (Key)
2890
+ );
2891
+ SELECT * FROM Test7;
2892
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2893
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2894
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2895
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2896
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test6" ).GetValueSync ();
2897
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2898
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test7" ).GetValueSync ();
2899
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2900
+ }
2901
+
2902
+ {
2903
+ // 1 dml 1 ddl 1 dml 1 ddl statements
2904
+ auto result = db.ExecuteQuery (R"(
2905
+ SELECT * FROM Test7;
2906
+ CREATE TABLE Test8 (
2907
+ Key Uint64,
2908
+ Value1 String,
2909
+ Value2 String,
2910
+ PRIMARY KEY (Key)
2911
+ );
2912
+ SELECT * FROM Test8;
2913
+ CREATE TABLE Test9 (
2914
+ Key Uint64,
2915
+ Value1 String,
2916
+ Value2 String,
2917
+ PRIMARY KEY (Key)
2918
+ );
2919
+ )" , TTxControl::NoTx ()).ExtractValueSync ();
2920
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2921
+ UNIT_ASSERT_VALUES_EQUAL (result.GetResultSets ().size (), 2 );
2922
+ UNIT_ASSERT_EQUAL_C (result.GetIssues ().Size (), 0 , result.GetIssues ().ToString ());
2923
+ NYdb::NTable::TDescribeTableResult describe1 = session.DescribeTable (" /Root/Test8" ).GetValueSync ();
2924
+ UNIT_ASSERT_EQUAL (describe1.GetStatus (), EStatus::SUCCESS);
2925
+ NYdb::NTable::TDescribeTableResult describe2 = session.DescribeTable (" /Root/Test9" ).GetValueSync ();
2926
+ UNIT_ASSERT_EQUAL (describe2.GetStatus (), EStatus::SUCCESS);
2927
+ }
2928
+ }
2929
+
2748
2930
Y_UNIT_TEST (TableSink_ReplaceFromSelectOlap) {
2749
2931
NKikimrConfig::TAppConfig appConfig;
2750
2932
appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
0 commit comments