@@ -1614,7 +1614,8 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
1614
1614
appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
1615
1615
auto settings = TKikimrSettings ()
1616
1616
.SetAppConfig (appConfig)
1617
- .SetWithSampleTables (false );
1617
+ .SetWithSampleTables (false )
1618
+ .SetEnableTempTables (true );
1618
1619
TKikimrRunner kikimr (settings);
1619
1620
1620
1621
auto client = kikimr.GetQueryClient ();
@@ -1779,6 +1780,238 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
1779
1780
CompareYson (R"( [[8u]])" , FormatResultSetYson (it.GetResultSet (0 )));
1780
1781
}
1781
1782
}
1783
+
1784
+ Y_UNIT_TEST (CreateAsSelect_BadCases) {
1785
+ NKikimrConfig::TAppConfig appConfig;
1786
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
1787
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (false );
1788
+ appConfig.MutableTableServiceConfig ()->SetEnableHtapTx (false );
1789
+ appConfig.MutableTableServiceConfig ()->SetEnableCreateTableAs (true );
1790
+ appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (false );
1791
+ auto settings = TKikimrSettings ()
1792
+ .SetAppConfig (appConfig)
1793
+ .SetWithSampleTables (false )
1794
+ .SetEnableTempTables (true );
1795
+ TKikimrRunner kikimr (settings);
1796
+
1797
+ const TString query = R"(
1798
+ CREATE TABLE `/Root/ColSrc` (
1799
+ Col1 Uint64 NOT NULL,
1800
+ Col2 Int32,
1801
+ PRIMARY KEY (Col1)
1802
+ )
1803
+ PARTITION BY HASH(Col1)
1804
+ WITH (STORE = COLUMN, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10);
1805
+
1806
+ CREATE TABLE `/Root/RowSrc` (
1807
+ Col1 Uint64 NOT NULL,
1808
+ Col2 Int32,
1809
+ PRIMARY KEY (Col1)
1810
+ )
1811
+ WITH (STORE = ROW, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10);
1812
+ )" ;
1813
+
1814
+ auto client = kikimr.GetQueryClient ();
1815
+ auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1816
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
1817
+
1818
+ {
1819
+ auto prepareResult = client.ExecuteQuery (R"(
1820
+ REPLACE INTO `/Root/ColSrc` (Col1, Col2) VALUES (1u, 1), (100u, 100), (10u, 10);
1821
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1822
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
1823
+ }
1824
+
1825
+ {
1826
+ auto prepareResult = client.ExecuteQuery (R"(
1827
+ REPLACE INTO `/Root/RowSrc` (Col1, Col2) VALUES (1u, 1), (100u, 100), (10u, 10);
1828
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1829
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
1830
+ }
1831
+
1832
+ {
1833
+ auto result = client.ExecuteQuery (R"(
1834
+ CREATE OR REPLACE TABLE `/Root/RowDst` (
1835
+ PRIMARY KEY (Col1)
1836
+ )
1837
+ WITH (STORE = ROW) AS
1838
+ SELECT * FROM `/Root/RowSrc`;
1839
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1840
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1841
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " OR REPLACE feature is supported only for EXTERNAL DATA SOURCE and EXTERNAL TABLE" , result.GetIssues ().ToString ());
1842
+ }
1843
+
1844
+ {
1845
+ auto result = client.ExecuteQuery (R"(
1846
+ CREATE IF NOT EXISTS TABLE `/Root/RowDst` (
1847
+ PRIMARY KEY (Col1)
1848
+ )
1849
+ WITH (STORE = ROW) AS
1850
+ SELECT * FROM `/Root/RowSrc`;
1851
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1852
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1853
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Unexpected token" , result.GetIssues ().ToString ());
1854
+ }
1855
+
1856
+ {
1857
+ auto result = client.ExecuteQuery (R"(
1858
+ CREATE TABLE `/Root/RowDst` (
1859
+ INDEX idx GLOBAL ON Col2,
1860
+ PRIMARY KEY (Col1)
1861
+ )
1862
+ WITH (STORE = ROW) AS
1863
+ SELECT * FROM `/Root/RowSrc`;
1864
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1865
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1866
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Unexpected token" , result.GetIssues ().ToString ());
1867
+ }
1868
+
1869
+ {
1870
+ auto result = client.ExecuteQuery (R"(
1871
+ CREATE TABLE `/Root/RowDst` (
1872
+ PRIMARY KEY (Col1)
1873
+ )
1874
+ WITH (STORE = ROW) AS
1875
+ SELECT Col1, 1 / (Col2 - 100) As Col2 FROM `/Root/RowSrc`;
1876
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1877
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1878
+
1879
+ result = client.ExecuteQuery (R"(
1880
+ SELECT * FROM `/Root/RowDst` ORDER BY Col1;
1881
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1882
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1883
+ CompareYson (R"( [[[1u];[0]];[[10u];[0]];[[100u];#]])" , FormatResultSetYson (result.GetResultSet (0 )));
1884
+
1885
+ result = client.ExecuteQuery (R"(
1886
+ DROP TABLE `/Root/RowDst`;
1887
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1888
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1889
+ }
1890
+
1891
+ {
1892
+ auto result = client.ExecuteQuery (R"(
1893
+ CREATE TABLE `/Root/RowDst` (
1894
+ PRIMARY KEY (Col1)
1895
+ )
1896
+ WITH (STORE = ROW) AS
1897
+ SELECT Col2 AS Col1, Col1 As Col2 FROM `/Root/RowSrc`;
1898
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1899
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1900
+
1901
+ result = client.ExecuteQuery (R"(
1902
+ SELECT * FROM `/Root/RowDst`;
1903
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1904
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1905
+
1906
+
1907
+ result = client.ExecuteQuery (R"(
1908
+ DROP TABLE `/Root/RowDst`;
1909
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1910
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1911
+ }
1912
+
1913
+ {
1914
+ auto result = client.ExecuteQuery (R"(
1915
+ CREATE TABLE `/Root/ColDst` (
1916
+ PRIMARY KEY (Col1)
1917
+ )
1918
+ WITH (STORE = COLUMN) AS
1919
+ SELECT Col2 AS Col1, Col1 As Col2 FROM `/Root/ColSrc`;
1920
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1921
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1922
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " Can't set NULL or optional value to not null column: Col1." , result.GetIssues ().ToString ());
1923
+
1924
+ result = client.ExecuteQuery (R"(
1925
+ SELECT * FROM `/Root/ColDst`;
1926
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1927
+ // TODO: Wait for RENAME from columnshards
1928
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1929
+
1930
+ result = client.ExecuteQuery (R"(
1931
+ DROP TABLE `/Root/ColDst`;
1932
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1933
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1934
+ }
1935
+
1936
+ {
1937
+ auto result = client.ExecuteQuery (R"(
1938
+ CREATE TABLE `/Root/ColDst` (
1939
+ PRIMARY KEY (Col1)
1940
+ )
1941
+ WITH (STORE = COLUMN) AS
1942
+ SELECT Unwrap(Col2) AS Col1, Col1 As Col2 FROM `/Root/ColSrc`;
1943
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1944
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1945
+
1946
+ result = client.ExecuteQuery (R"(
1947
+ SELECT * FROM `/Root/ColDst`;
1948
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1949
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1950
+
1951
+ result = client.ExecuteQuery (R"(
1952
+ DROP TABLE `/Root/ColDst`;
1953
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1954
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1955
+ }
1956
+
1957
+ {
1958
+ auto result = client.ExecuteQuery (R"(
1959
+ CREATE TABLE `/Root/RowlDst` (
1960
+ PRIMARY KEY (Col1)
1961
+ )
1962
+ WITH (STORE = COLUMN) AS
1963
+ SELECT NotFound AS Col1, Col1 As Col2 FROM `/Root/RowSrc`;
1964
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1965
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1966
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " not found" , result.GetIssues ().ToString ());
1967
+ }
1968
+
1969
+ {
1970
+ auto result = client.ExecuteQuery (R"(
1971
+ CREATE TABLE `/Root/RowSrc` (
1972
+ PRIMARY KEY (Col1)
1973
+ )
1974
+ WITH (STORE = ROW) AS
1975
+ SELECT 1 AS Col1, 2 As Col2;
1976
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1977
+ UNIT_ASSERT_C (!result.IsSuccess (), result.GetIssues ().ToString ());
1978
+ UNIT_ASSERT_STRING_CONTAINS_C (result.GetIssues ().ToString (), " path exist" , result.GetIssues ().ToString ());
1979
+ }
1980
+
1981
+ {
1982
+ auto result = client.ExecuteQuery (R"(
1983
+ CREATE TABLE `/Root/RowDst` (
1984
+ PRIMARY KEY (Col1)
1985
+ )
1986
+ WITH (STORE = ROW) AS
1987
+ SELECT * FROM `/Root/ColSrc`;
1988
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1989
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1990
+
1991
+ result = client.ExecuteQuery (R"(
1992
+ SELECT COUNT(*) FROM `/Root/RowDst`;
1993
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1994
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1995
+ CompareYson (R"( [[3u]])" , FormatResultSetYson (result.GetResultSet (0 )));
1996
+ }
1997
+
1998
+ {
1999
+ auto result = client.ExecuteQuery (R"(
2000
+ CREATE TABLE `/Root/ColDst` (
2001
+ PRIMARY KEY (Col1)
2002
+ )
2003
+ WITH (STORE = ROW) AS
2004
+ SELECT * FROM `/Root/RowSrc`;
2005
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2006
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2007
+
2008
+ result = client.ExecuteQuery (R"(
2009
+ SELECT COUNT(*) FROM `/Root/ColDst`;
2010
+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2011
+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2012
+ CompareYson (R"( [[3u]])" , FormatResultSetYson (result.GetResultSet (0 )));
2013
+ }
2014
+ }
1782
2015
}
1783
2016
1784
2017
} // namespace NKqp
0 commit comments