@@ -1793,13 +1793,13 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1793
1793
ExecuteSelectQuery (" test_bucket_execute_script_with_large_file" , 5_MB, 500000 );
1794
1794
}
1795
1795
1796
- std::shared_ptr<TKikimrRunner> CreateSampleDataSource (const TString& externalDataSourceName, const TString& externalTableName) {
1796
+ std::shared_ptr<TKikimrRunner> CreateSampleDataSource (const TString& externalDataSourceName, const TString& externalTableName, bool enableOltp ) {
1797
1797
const TString bucket = " test_bucket3" ;
1798
1798
const TString object = " test_object" ;
1799
1799
1800
1800
NKikimrConfig::TAppConfig appConfig;
1801
1801
appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
1802
- appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (true );
1802
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (enableOltp );
1803
1803
appConfig.MutableTableServiceConfig ()->SetEnableCreateTableAs (true );
1804
1804
appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
1805
1805
appConfig.MutableFeatureFlags ()->SetEnableTempTables (true );
@@ -1852,8 +1852,8 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1852
1852
1853
1853
}
1854
1854
1855
- void ValidateTables (TQueryClient& client, const TString& oltpTable, const TString& olapTable) {
1856
- {
1855
+ void ValidateTables (TQueryClient& client, const TString& oltpTable, const TString& olapTable, bool enableOltp ) {
1856
+ if (enableOltp) {
1857
1857
const TString query = TStringBuilder () << " SELECT Unwrap(key), Unwrap(value) FROM `" << oltpTable << " `;" ;
1858
1858
ValidateResult (client.ExecuteQuery (query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ());
1859
1859
}
@@ -1864,15 +1864,15 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1864
1864
}
1865
1865
}
1866
1866
1867
- Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSource ) {
1867
+ void DoCreateTableAsSelectFromExternalDataSource (std::function< void ( const TString&, TQueryClient&, const TDriver&)> requestRunner, bool enableOltp ) {
1868
1868
const TString externalDataSourceName = " external_data_source" ;
1869
1869
const TString externalTableName = " test_binding_resolve" ;
1870
1870
1871
- auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName);
1871
+ auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName, enableOltp );
1872
1872
auto client = kikimr->GetQueryClient ();
1873
1873
1874
1874
const TString oltpTable = " DestinationOltp" ;
1875
- {
1875
+ if (enableOltp) {
1876
1876
const TString query = fmt::format (R"(
1877
1877
PRAGMA TablePathPrefix = "TestDomain";
1878
1878
CREATE TABLE `{destination}` (
@@ -1889,8 +1889,7 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1889
1889
" destination" _a = oltpTable,
1890
1890
" external_source" _a = externalDataSourceName
1891
1891
);
1892
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1893
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1892
+ requestRunner (query, client, kikimr->GetDriver ());
1894
1893
}
1895
1894
1896
1895
const TString olapTable = " DestinationOlap" ;
@@ -1912,22 +1911,43 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1912
1911
" destination" _a = olapTable,
1913
1912
" external_source" _a = externalDataSourceName
1914
1913
);
1915
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1916
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1914
+ requestRunner (query, client, kikimr->GetDriver ());
1917
1915
}
1918
1916
1919
- ValidateTables (client, oltpTable, olapTable);
1917
+ ValidateTables (client, oltpTable, olapTable, enableOltp);
1918
+ }
1919
+
1920
+ void RunGenericQuery (const TString& query, TQueryClient& client, const TDriver&) {
1921
+ auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1922
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1923
+ }
1924
+
1925
+ void RunGenericScript (const TString& script, TQueryClient& client, const TDriver& driver) {
1926
+ auto scriptExecutionOperation = client.ExecuteScript (script).ExtractValueSync ();
1927
+ UNIT_ASSERT_VALUES_EQUAL_C (scriptExecutionOperation.Status ().GetStatus (), EStatus::SUCCESS, scriptExecutionOperation.Status ().GetIssues ().ToString ());
1928
+ UNIT_ASSERT (scriptExecutionOperation.Metadata ().ExecutionId );
1929
+
1930
+ NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation (scriptExecutionOperation.Id (), driver);
1931
+ UNIT_ASSERT_VALUES_EQUAL_C (readyOp.Metadata ().ExecStatus , EExecStatus::Completed, readyOp.Status ().GetIssues ().ToOneLineString ());
1920
1932
}
1921
1933
1922
- Y_UNIT_TEST (CreateTableAsSelectFromExternalTable) {
1934
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSourceGenericQuery) {
1935
+ DoCreateTableAsSelectFromExternalDataSource (&RunGenericQuery, true );
1936
+ }
1937
+
1938
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSourceGenericScript) {
1939
+ DoCreateTableAsSelectFromExternalDataSource (&RunGenericScript, false );
1940
+ }
1941
+
1942
+ void DoCreateTableAsSelectFromExternalTable (std::function<void (const TString&, TQueryClient&, const TDriver&)> requestRunner, bool enableOltp) {
1923
1943
const TString externalDataSourceName = " external_data_source" ;
1924
1944
const TString externalTableName = " test_binding_resolve" ;
1925
1945
1926
- auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName);
1946
+ auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName, enableOltp );
1927
1947
auto client = kikimr->GetQueryClient ();
1928
1948
1929
1949
const TString oltpTable = " DestinationOltp" ;
1930
- {
1950
+ if (enableOltp) {
1931
1951
const TString query = fmt::format (R"(
1932
1952
PRAGMA TablePathPrefix = "TestDomain";
1933
1953
CREATE TABLE `{destination}` (
@@ -1938,8 +1958,7 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1938
1958
" destination" _a = oltpTable,
1939
1959
" external_table" _a = externalTableName
1940
1960
);
1941
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1942
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1961
+ requestRunner (query, client, kikimr->GetDriver ());
1943
1962
}
1944
1963
1945
1964
const TString olapTable = " DestinationOlap" ;
@@ -1955,11 +1974,18 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1955
1974
" destination" _a = olapTable,
1956
1975
" external_table" _a = externalTableName
1957
1976
);
1958
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1959
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1977
+ requestRunner (query, client, kikimr->GetDriver ());
1960
1978
}
1961
1979
1962
- ValidateTables (client, oltpTable, olapTable);
1980
+ ValidateTables (client, oltpTable, olapTable, enableOltp);
1981
+ }
1982
+
1983
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalTableGenericQuery) {
1984
+ DoCreateTableAsSelectFromExternalTable (&RunGenericQuery, true );
1985
+ }
1986
+
1987
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalTableGenericScript) {
1988
+ DoCreateTableAsSelectFromExternalTable (&RunGenericScript, false );
1963
1989
}
1964
1990
}
1965
1991
0 commit comments