@@ -1804,13 +1804,13 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1804
1804
ExecuteSelectQuery (" test_bucket_execute_script_with_large_file" , 5_MB, 500000 );
1805
1805
}
1806
1806
1807
- std::shared_ptr<TKikimrRunner> CreateSampleDataSource (const TString& externalDataSourceName, const TString& externalTableName) {
1807
+ std::shared_ptr<TKikimrRunner> CreateSampleDataSource (const TString& externalDataSourceName, const TString& externalTableName, bool enableOltp ) {
1808
1808
const TString bucket = " test_bucket3" ;
1809
1809
const TString object = " test_object" ;
1810
1810
1811
1811
NKikimrConfig::TAppConfig appConfig;
1812
1812
appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
1813
- appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (true );
1813
+ appConfig.MutableTableServiceConfig ()->SetEnableOltpSink (enableOltp );
1814
1814
appConfig.MutableTableServiceConfig ()->SetEnableCreateTableAs (true );
1815
1815
appConfig.MutableTableServiceConfig ()->SetEnablePerStatementQueryExecution (true );
1816
1816
appConfig.MutableFeatureFlags ()->SetEnableTempTables (true );
@@ -1863,8 +1863,8 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1863
1863
1864
1864
}
1865
1865
1866
- void ValidateTables (TQueryClient& client, const TString& oltpTable, const TString& olapTable) {
1867
- {
1866
+ void ValidateTables (TQueryClient& client, const TString& oltpTable, const TString& olapTable, bool enableOltp ) {
1867
+ if (enableOltp) {
1868
1868
const TString query = TStringBuilder () << " SELECT Unwrap(key), Unwrap(value) FROM `" << oltpTable << " `;" ;
1869
1869
ValidateResult (client.ExecuteQuery (query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ());
1870
1870
}
@@ -1875,15 +1875,15 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1875
1875
}
1876
1876
}
1877
1877
1878
- Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSource ) {
1878
+ void DoCreateTableAsSelectFromExternalDataSource (std::function< void ( const TString&, TQueryClient&, const TDriver&)> requestRunner, bool enableOltp ) {
1879
1879
const TString externalDataSourceName = " external_data_source" ;
1880
1880
const TString externalTableName = " test_binding_resolve" ;
1881
1881
1882
- auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName);
1882
+ auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName, enableOltp );
1883
1883
auto client = kikimr->GetQueryClient ();
1884
1884
1885
1885
const TString oltpTable = " DestinationOltp" ;
1886
- {
1886
+ if (enableOltp) {
1887
1887
const TString query = fmt::format (R"(
1888
1888
PRAGMA TablePathPrefix = "TestDomain";
1889
1889
CREATE TABLE `{destination}` (
@@ -1900,8 +1900,7 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1900
1900
" destination" _a = oltpTable,
1901
1901
" external_source" _a = externalDataSourceName
1902
1902
);
1903
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1904
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1903
+ requestRunner (query, client, kikimr->GetDriver ());
1905
1904
}
1906
1905
1907
1906
const TString olapTable = " DestinationOlap" ;
@@ -1923,22 +1922,43 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1923
1922
" destination" _a = olapTable,
1924
1923
" external_source" _a = externalDataSourceName
1925
1924
);
1926
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1927
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1925
+ requestRunner (query, client, kikimr->GetDriver ());
1928
1926
}
1929
1927
1930
- ValidateTables (client, oltpTable, olapTable);
1928
+ ValidateTables (client, oltpTable, olapTable, enableOltp);
1929
+ }
1930
+
1931
+ void RunGenericQuery (const TString& query, TQueryClient& client, const TDriver&) {
1932
+ auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1933
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1934
+ }
1935
+
1936
+ void RunGenericScript (const TString& script, TQueryClient& client, const TDriver& driver) {
1937
+ auto scriptExecutionOperation = client.ExecuteScript (script).ExtractValueSync ();
1938
+ UNIT_ASSERT_VALUES_EQUAL_C (scriptExecutionOperation.Status ().GetStatus (), EStatus::SUCCESS, scriptExecutionOperation.Status ().GetIssues ().ToString ());
1939
+ UNIT_ASSERT (scriptExecutionOperation.Metadata ().ExecutionId );
1940
+
1941
+ NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation (scriptExecutionOperation.Id (), driver);
1942
+ UNIT_ASSERT_VALUES_EQUAL_C (readyOp.Metadata ().ExecStatus , EExecStatus::Completed, readyOp.Status ().GetIssues ().ToOneLineString ());
1931
1943
}
1932
1944
1933
- Y_UNIT_TEST (CreateTableAsSelectFromExternalTable) {
1945
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSourceGenericQuery) {
1946
+ DoCreateTableAsSelectFromExternalDataSource (&RunGenericQuery, true );
1947
+ }
1948
+
1949
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalDataSourceGenericScript) {
1950
+ DoCreateTableAsSelectFromExternalDataSource (&RunGenericScript, false );
1951
+ }
1952
+
1953
+ void DoCreateTableAsSelectFromExternalTable (std::function<void (const TString&, TQueryClient&, const TDriver&)> requestRunner, bool enableOltp) {
1934
1954
const TString externalDataSourceName = " external_data_source" ;
1935
1955
const TString externalTableName = " test_binding_resolve" ;
1936
1956
1937
- auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName);
1957
+ auto kikimr = CreateSampleDataSource (externalDataSourceName, externalTableName, enableOltp );
1938
1958
auto client = kikimr->GetQueryClient ();
1939
1959
1940
1960
const TString oltpTable = " DestinationOltp" ;
1941
- {
1961
+ if (enableOltp) {
1942
1962
const TString query = fmt::format (R"(
1943
1963
PRAGMA TablePathPrefix = "TestDomain";
1944
1964
CREATE TABLE `{destination}` (
@@ -1949,8 +1969,7 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1949
1969
" destination" _a = oltpTable,
1950
1970
" external_table" _a = externalTableName
1951
1971
);
1952
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1953
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1972
+ requestRunner (query, client, kikimr->GetDriver ());
1954
1973
}
1955
1974
1956
1975
const TString olapTable = " DestinationOlap" ;
@@ -1966,11 +1985,18 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
1966
1985
" destination" _a = olapTable,
1967
1986
" external_table" _a = externalTableName
1968
1987
);
1969
- auto result = client.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1970
- UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1988
+ requestRunner (query, client, kikimr->GetDriver ());
1971
1989
}
1972
1990
1973
- ValidateTables (client, oltpTable, olapTable);
1991
+ ValidateTables (client, oltpTable, olapTable, enableOltp);
1992
+ }
1993
+
1994
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalTableGenericQuery) {
1995
+ DoCreateTableAsSelectFromExternalTable (&RunGenericQuery, true );
1996
+ }
1997
+
1998
+ Y_UNIT_TEST (CreateTableAsSelectFromExternalTableGenericScript) {
1999
+ DoCreateTableAsSelectFromExternalTable (&RunGenericScript, false );
1974
2000
}
1975
2001
1976
2002
Y_UNIT_TEST (OverridePlannerDefaults) {
0 commit comments