@@ -2674,7 +2674,123 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
2674
2674
UPDATE test_table SET data = "a"
2675
2675
)" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2676
2676
UNIT_ASSERT_VALUES_EQUAL_C (hangingResult.GetStatus (), EStatus::SUCCESS, hangingResult.GetIssues ().ToString ());
2677
- }
2677
+ }
2678
+
2679
+ Y_UNIT_TEST (CreateAsSelectView) {
2680
+ NKikimrConfig::TAppConfig appConfig;
2681
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
2682
+ appConfig.MutableTableServiceConfig ()->SetEnableCreateTableAs (true );
2683
+ appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
2684
+ auto settings = TKikimrSettings ()
2685
+ .SetAppConfig (appConfig)
2686
+ .SetWithSampleTables (false );
2687
+ TKikimrRunner kikimr (settings);
2688
+
2689
+ Tests::NCommon::TLoggerInit (kikimr).SetComponents ({ NKikimrServices::TX_COLUMNSHARD }, " CS" ).Initialize ();
2690
+
2691
+ auto client = kikimr.GetQueryClient ();
2692
+
2693
+ {
2694
+ auto result = client.ExecuteQuery ( R"(
2695
+ CREATE TABLE `l_source` (
2696
+ id Uint64,
2697
+ num Uint64,
2698
+ unused String,
2699
+ PRIMARY KEY (id)
2700
+ );
2701
+
2702
+ CREATE TABLE `r_source` (
2703
+ id Uint64,
2704
+ id2 Uint64,
2705
+ unused String,
2706
+ PRIMARY KEY (id)
2707
+ );
2708
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2709
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
2710
+ }
2711
+
2712
+ {
2713
+ auto result = client.ExecuteQuery ( R"(
2714
+ CREATE VIEW `l`
2715
+ with (security_invoker = TRUE)
2716
+ AS (
2717
+ SELECT
2718
+ id,
2719
+ num
2720
+ FROM
2721
+ `l_source`
2722
+ );
2723
+
2724
+ CREATE VIEW `r`
2725
+ with (security_invoker = TRUE)
2726
+ AS (
2727
+ SELECT
2728
+ id,
2729
+ id2
2730
+ FROM
2731
+ `r_source`
2732
+ );
2733
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2734
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
2735
+ }
2736
+
2737
+ {
2738
+ auto prepareResult = client.ExecuteQuery (R"(
2739
+ INSERT INTO `/Root/l_source` (id, num) VALUES
2740
+ (1u, 1u), (100u, 100u), (10u, 10u);
2741
+ INSERT INTO `/Root/r_source` (id, id2) VALUES
2742
+ (1u, 1u), (100u, 100u), (10u, 10u);
2743
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2744
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
2745
+ }
2746
+
2747
+ {
2748
+ auto prepareResult = client.ExecuteQuery (R"(
2749
+ CREATE TABLE `table1`
2750
+ (PRIMARY KEY (id))
2751
+ AS (
2752
+ SELECT
2753
+ id, num
2754
+ FROM `l`
2755
+ )
2756
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2757
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
2758
+ }
2759
+
2760
+ {
2761
+ auto it = client.StreamExecuteQuery (R"(
2762
+ SELECT id, num FROM `/Root/table1` ORDER BY id;
2763
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2764
+ UNIT_ASSERT_VALUES_EQUAL_C (it.GetStatus (), EStatus::SUCCESS, it.GetIssues ().ToString ());
2765
+ TString output = StreamResultToYson (it);
2766
+ CompareYson (output, R"( [[[1u];[1u]];[[10u];[10u]];[[100u];[100u]]])" );
2767
+ }
2768
+
2769
+ {
2770
+ auto prepareResult = client.ExecuteQuery (R"(
2771
+ CREATE TABLE `table2`
2772
+ (PRIMARY KEY (id2))
2773
+ AS (
2774
+ SELECT
2775
+ r.id2 AS id2,
2776
+ sum(l.num) AS num
2777
+ FROM `l` AS l
2778
+ LEFT JOIN `r` AS r ON l.id = r.id
2779
+ GROUP BY r.id2
2780
+ )
2781
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2782
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
2783
+ }
2784
+
2785
+ {
2786
+ auto it = client.StreamExecuteQuery (R"(
2787
+ SELECT id2, num FROM `/Root/table2` ORDER BY id2;
2788
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2789
+ UNIT_ASSERT_VALUES_EQUAL_C (it.GetStatus (), EStatus::SUCCESS, it.GetIssues ().ToString ());
2790
+ TString output = StreamResultToYson (it);
2791
+ CompareYson (output, R"( [[[1u];[1u]];[[10u];[10u]];[[100u];[100u]]])" );
2792
+ }
2793
+ }
2678
2794
}
2679
2795
2680
2796
} // namespace NKqp
0 commit comments