@@ -1707,7 +1707,8 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
1707
1707
appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
1708
1708
auto settings = TKikimrSettings ()
1709
1709
.SetAppConfig (appConfig)
1710
- .SetWithSampleTables (false );
1710
+ .SetWithSampleTables (false )
1711
+ .SetEnableTempTables (true );
1711
1712
TKikimrRunner kikimr (settings);
1712
1713
1713
1714
auto client = kikimr.GetQueryClient ();
@@ -1872,6 +1873,238 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
1872
1873
CompareYson (R"( [[8u]])" , FormatResultSetYson (it.GetResultSet (0 )));
1873
1874
}
1874
1875
}
1876
+
1877
+ Y_UNIT_TEST (CreateAsSelect_BadCases) {
1878
+ NKikimrConfig::TAppConfig appConfig;
1879
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
1880
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (false );
1881
+ appConfig.MutableTableServiceConfig ()->SetEnableHtapTx (false );
1882
+ appConfig.MutableTableServiceConfig ()->SetEnableCreateTableAs (true );
1883
+ appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (false );
1884
+ auto settings = TKikimrSettings ()
1885
+ .SetAppConfig (appConfig)
1886
+ .SetWithSampleTables (false )
1887
+ .SetEnableTempTables (true );
1888
+ TKikimrRunner kikimr (settings);
1889
+
1890
+ const TString query = R"(
1891
+ CREATE TABLE `/Root/ColSrc` (
1892
+ Col1 Uint64 NOT NULL,
1893
+ Col2 Int32,
1894
+ PRIMARY KEY (Col1)
1895
+ )
1896
+ PARTITION BY HASH(Col1)
1897
+ WITH (STORE = COLUMN, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10);
1898
+
1899
+ CREATE TABLE `/Root/RowSrc` (
1900
+ Col1 Uint64 NOT NULL,
1901
+ Col2 Int32,
1902
+ PRIMARY KEY (Col1)
1903
+ )
1904
+ WITH (STORE = ROW, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10);
1905
+ )" ;
1906
+
1907
+ auto client = kikimr.GetQueryClient ();
1908
+ auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1909
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
1910
+
1911
+ {
1912
+ auto prepareResult = client.ExecuteQuery (R"(
1913
+ REPLACE INTO `/Root/ColSrc` (Col1, Col2) VALUES (1u, 1), (100u, 100), (10u, 10);
1914
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1915
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
1916
+ }
1917
+
1918
+ {
1919
+ auto prepareResult = client.ExecuteQuery (R"(
1920
+ REPLACE INTO `/Root/RowSrc` (Col1, Col2) VALUES (1u, 1), (100u, 100), (10u, 10);
1921
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1922
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
1923
+ }
1924
+
1925
+ {
1926
+ auto result = client.ExecuteQuery (R"(
1927
+ CREATE OR REPLACE TABLE `/Root/RowDst` (
1928
+ PRIMARY KEY (Col1)
1929
+ )
1930
+ WITH (STORE = ROW) AS
1931
+ SELECT * FROM `/Root/RowSrc`;
1932
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1933
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1934
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " OR REPLACE feature is supported only for EXTERNAL DATA SOURCE and EXTERNAL TABLE" , result.GetIssues ().ToString ());
1935
+ }
1936
+
1937
+ {
1938
+ auto result = client.ExecuteQuery (R"(
1939
+ CREATE IF NOT EXISTS TABLE `/Root/RowDst` (
1940
+ PRIMARY KEY (Col1)
1941
+ )
1942
+ WITH (STORE = ROW) AS
1943
+ SELECT * FROM `/Root/RowSrc`;
1944
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1945
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1946
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Unexpected token" , result.GetIssues ().ToString ());
1947
+ }
1948
+
1949
+ {
1950
+ auto result = client.ExecuteQuery (R"(
1951
+ CREATE TABLE `/Root/RowDst` (
1952
+ INDEX idx GLOBAL ON Col2,
1953
+ PRIMARY KEY (Col1)
1954
+ )
1955
+ WITH (STORE = ROW) AS
1956
+ SELECT * FROM `/Root/RowSrc`;
1957
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1958
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1959
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Unexpected token" , result.GetIssues ().ToString ());
1960
+ }
1961
+
1962
+ {
1963
+ auto result = client.ExecuteQuery (R"(
1964
+ CREATE TABLE `/Root/RowDst` (
1965
+ PRIMARY KEY (Col1)
1966
+ )
1967
+ WITH (STORE = ROW) AS
1968
+ SELECT Col1, 1 / (Col2 - 100) As Col2 FROM `/Root/RowSrc`;
1969
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1970
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1971
+
1972
+ result = client.ExecuteQuery (R"(
1973
+ SELECT * FROM `/Root/RowDst` ORDER BY Col1;
1974
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1975
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1976
+ CompareYson (R"( [[[1u];[0]];[[10u];[0]];[[100u];#]])" , FormatResultSetYson (result.GetResultSet (0 )));
1977
+
1978
+ result = client.ExecuteQuery (R"(
1979
+ DROP TABLE `/Root/RowDst`;
1980
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1981
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1982
+ }
1983
+
1984
+ {
1985
+ auto result = client.ExecuteQuery (R"(
1986
+ CREATE TABLE `/Root/RowDst` (
1987
+ PRIMARY KEY (Col1)
1988
+ )
1989
+ WITH (STORE = ROW) AS
1990
+ SELECT Col2 AS Col1, Col1 As Col2 FROM `/Root/RowSrc`;
1991
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1992
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1993
+
1994
+ result = client.ExecuteQuery (R"(
1995
+ SELECT * FROM `/Root/RowDst`;
1996
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1997
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1998
+
1999
+
2000
+ result = client.ExecuteQuery (R"(
2001
+ DROP TABLE `/Root/RowDst`;
2002
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2003
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2004
+ }
2005
+
2006
+ {
2007
+ auto result = client.ExecuteQuery (R"(
2008
+ CREATE TABLE `/Root/ColDst` (
2009
+ PRIMARY KEY (Col1)
2010
+ )
2011
+ WITH (STORE = COLUMN) AS
2012
+ SELECT Col2 AS Col1, Col1 As Col2 FROM `/Root/ColSrc`;
2013
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2014
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
2015
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Can't set NULL or optional value to not null column: Col1." , result.GetIssues ().ToString ());
2016
+
2017
+ result = client.ExecuteQuery (R"(
2018
+ SELECT * FROM `/Root/ColDst`;
2019
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2020
+ // TODO: Wait for RENAME from columnshards
2021
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2022
+
2023
+ result = client.ExecuteQuery (R"(
2024
+ DROP TABLE `/Root/ColDst`;
2025
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2026
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2027
+ }
2028
+
2029
+ {
2030
+ auto result = client.ExecuteQuery (R"(
2031
+ CREATE TABLE `/Root/ColDst` (
2032
+ PRIMARY KEY (Col1)
2033
+ )
2034
+ WITH (STORE = COLUMN) AS
2035
+ SELECT Unwrap(Col2) AS Col1, Col1 As Col2 FROM `/Root/ColSrc`;
2036
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2037
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2038
+
2039
+ result = client.ExecuteQuery (R"(
2040
+ SELECT * FROM `/Root/ColDst`;
2041
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2042
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2043
+
2044
+ result = client.ExecuteQuery (R"(
2045
+ DROP TABLE `/Root/ColDst`;
2046
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2047
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2048
+ }
2049
+
2050
+ {
2051
+ auto result = client.ExecuteQuery (R"(
2052
+ CREATE TABLE `/Root/RowlDst` (
2053
+ PRIMARY KEY (Col1)
2054
+ )
2055
+ WITH (STORE = COLUMN) AS
2056
+ SELECT NotFound AS Col1, Col1 As Col2 FROM `/Root/RowSrc`;
2057
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2058
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
2059
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " not found" , result.GetIssues ().ToString ());
2060
+ }
2061
+
2062
+ {
2063
+ auto result = client.ExecuteQuery (R"(
2064
+ CREATE TABLE `/Root/RowSrc` (
2065
+ PRIMARY KEY (Col1)
2066
+ )
2067
+ WITH (STORE = ROW) AS
2068
+ SELECT 1 AS Col1, 2 As Col2;
2069
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2070
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
2071
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " path exist" , result.GetIssues ().ToString ());
2072
+ }
2073
+
2074
+ {
2075
+ auto result = client.ExecuteQuery (R"(
2076
+ CREATE TABLE `/Root/RowDst` (
2077
+ PRIMARY KEY (Col1)
2078
+ )
2079
+ WITH (STORE = ROW) AS
2080
+ SELECT * FROM `/Root/ColSrc`;
2081
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2082
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2083
+
2084
+ result = client.ExecuteQuery (R"(
2085
+ SELECT COUNT(*) FROM `/Root/RowDst`;
2086
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2087
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2088
+ CompareYson (R"( [[3u]])" , FormatResultSetYson (result.GetResultSet (0 )));
2089
+ }
2090
+
2091
+ {
2092
+ auto result = client.ExecuteQuery (R"(
2093
+ CREATE TABLE `/Root/ColDst` (
2094
+ PRIMARY KEY (Col1)
2095
+ )
2096
+ WITH (STORE = ROW) AS
2097
+ SELECT * FROM `/Root/RowSrc`;
2098
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2099
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2100
+
2101
+ result = client.ExecuteQuery (R"(
2102
+ SELECT COUNT(*) FROM `/Root/ColDst`;
2103
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2104
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2105
+ CompareYson (R"( [[3u]])" , FormatResultSetYson (result.GetResultSet (0 )));
2106
+ }
2107
+ }
1875
2108
}
1876
2109
1877
2110
} // namespace NKqp
0 commit comments