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