@@ -1756,9 +1756,11 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
17561756 }
17571757 }
17581758
1759-
1760- Y_UNIT_TEST (JoinBothTablesWithNotNullPk) {
1761- TKikimrRunner kikimr;
1759+ Y_UNIT_TEST_TWIN (JoinBothTablesWithNotNullPk, StreamLookup) {
1760+ NKikimrConfig::TAppConfig appConfig;
1761+ appConfig.MutableTableServiceConfig ()->SetEnableKqpDataQueryStreamIdxLookupJoin (StreamLookup);
1762+ auto settings = TKikimrSettings ().SetAppConfig (appConfig);
1763+ TKikimrRunner kikimr (settings);
17621764 auto client = kikimr.GetTableClient ();
17631765 auto session = client.CreateSession ().GetValueSync ().GetSession ();
17641766
@@ -1805,8 +1807,11 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
18051807 }
18061808 }
18071809
1808- Y_UNIT_TEST (JoinLeftTableWithNotNullPk) {
1809- TKikimrRunner kikimr;
1810+ Y_UNIT_TEST_TWIN (JoinLeftTableWithNotNullPk, StreamLookup) {
1811+ NKikimrConfig::TAppConfig appConfig;
1812+ appConfig.MutableTableServiceConfig ()->SetEnableKqpDataQueryStreamIdxLookupJoin (StreamLookup);
1813+ auto settings = TKikimrSettings ().SetAppConfig (appConfig);
1814+ TKikimrRunner kikimr (settings);
18101815 auto client = kikimr.GetTableClient ();
18111816 auto session = client.CreateSession ().GetValueSync ().GetSession ();
18121817
@@ -1873,6 +1878,63 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
18731878 }
18741879 }
18751880
1881+ Y_UNIT_TEST_TWIN (JoinRightTableWithNotNullColumns, StreamLookup) {
1882+ NKikimrConfig::TAppConfig appConfig;
1883+ appConfig.MutableTableServiceConfig ()->SetEnableKqpDataQueryStreamIdxLookupJoin (StreamLookup);
1884+ auto settings = TKikimrSettings ().SetAppConfig (appConfig);
1885+ TKikimrRunner kikimr (settings);
1886+ auto client = kikimr.GetTableClient ();
1887+ auto session = client.CreateSession ().GetValueSync ().GetSession ();
1888+
1889+ {
1890+ auto createTableResult = session.ExecuteSchemeQuery (Q1_ (R"(
1891+ CREATE TABLE `/Root/Left` (
1892+ Key Uint64,
1893+ Value String,
1894+ PRIMARY KEY (Key)
1895+ );
1896+ )" )).ExtractValueSync ();
1897+ UNIT_ASSERT_C (createTableResult.IsSuccess (), createTableResult.GetIssues ().ToString ());
1898+
1899+ auto result = session.ExecuteDataQuery (Q1_ (R"(
1900+ UPSERT INTO `/Root/Left` (Key, Value) VALUES (1, 'lValue1'), (2, 'lValue2');
1901+ )" ), TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1902+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1903+ }
1904+
1905+ {
1906+ auto createTableResult = session.ExecuteSchemeQuery (Q1_ (R"(
1907+ CREATE TABLE `/Root/Right` (
1908+ Key Uint64 NOT NULL,
1909+ Value String NOT NULL,
1910+ PRIMARY KEY (Key)
1911+ );
1912+ )" )).ExtractValueSync ();
1913+ UNIT_ASSERT_C (createTableResult.IsSuccess (), createTableResult.GetIssues ().ToString ());
1914+
1915+ auto result = session.ExecuteDataQuery (Q1_ (R"(
1916+ UPSERT INTO `/Root/Right` (Key, Value) VALUES (1, 'rValue1'), (3, 'rValue3'), (4, 'rValue4');
1917+ )" ), TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1918+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1919+ }
1920+
1921+ { // left join
1922+ const auto query = Q1_ (R"(
1923+ SELECT l.Key, l.Value, r.Key, r.Value FROM `/Root/Left` AS l LEFT
1924+ JOIN `/Root/Right` AS r
1925+ ON l.Key = r.Key
1926+ ORDER BY l.Key;
1927+ )" );
1928+
1929+ auto result = session.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
1930+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
1931+ CompareYson (R"( [
1932+ [[1u];["lValue1"];[1u];["rValue1"]];
1933+ [[2u];["lValue2"];#;#]
1934+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
1935+ }
1936+ }
1937+
18761938 Y_UNIT_TEST (Describe) {
18771939 TKikimrRunner kikimr (NKqp::TKikimrSettings ().SetWithSampleTables (false ));
18781940 auto client = kikimr.GetTableClient ();
0 commit comments