@@ -314,6 +314,64 @@ Y_UNIT_TEST(ReturningSerial) {
314314 }
315315}
316316
317+
318+ Y_UNIT_TEST (ReturningWorksQS) {
319+ auto kikimr = DefaultKikimrRunner ();
320+ auto db = kikimr.GetTableClient ();
321+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
322+ CreateSampleTablesWithIndex (session, true );
323+
324+ auto qdb = kikimr.GetQueryClient ();
325+ auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
326+ auto result = qSession.ExecuteQuery (R"(
327+ UPSERT INTO `/Root/SecondaryKeys` (Key, Fk, Value) VALUES (1, 1, "Payload1") RETURNING *;
328+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
329+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
330+ CompareYson (R"( [
331+ [[1];[1];["Payload1"]];
332+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
333+ }
334+
335+ Y_UNIT_TEST (ReturningWorksIndexedUpsertV2) {
336+ auto kikimr = DefaultKikimrRunner ();
337+ auto db = kikimr.GetTableClient ();
338+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
339+ CreateSampleTablesWithIndex (session, true );
340+
341+ auto qdb = kikimr.GetQueryClient ();
342+ auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
343+ auto result = qSession.ExecuteQuery (R"(
344+ $v1 = (SELECT Key + 100 as Key, Fk + 100 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
345+ $v2 = (SELECT Key + 105 as Key, Fk + 105 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
346+ UPSERT INTO `/Root/SecondaryKeys`
347+ SELECT * FROM (SELECT * FROM $v1 UNION ALL SELECT * FROM $v2) WHERE Key > 107 RETURNING *;
348+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
349+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
350+ CompareYson (R"( [
351+ [[110];[110];["Payload5"]];
352+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
353+ }
354+
355+ Y_UNIT_TEST (ReturningWorksIndexedInsertV3) {
356+ auto kikimr = DefaultKikimrRunner ();
357+ auto db = kikimr.GetTableClient ();
358+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
359+ CreateSampleTablesWithIndex (session, true );
360+
361+ auto qdb = kikimr.GetQueryClient ();
362+ auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
363+ auto result = qSession.ExecuteQuery (R"(
364+ $v1 = (SELECT Key + 100 as Key, Fk + 100 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
365+ $v2 = (SELECT Key + 205 as Key, Fk + 205 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
366+ INSERT INTO `/Root/SecondaryKeys`
367+ SELECT * FROM (SELECT * FROM $v1 UNION ALL SELECT * FROM $v2 ) WHERE Key < 102 RETURNING *;
368+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
369+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
370+ CompareYson (R"( [
371+ [[101];[101];["Payload1"]];
372+ ])" , FormatResultSetYson (result.GetResultSet (0 )));
373+ }
374+
317375Y_UNIT_TEST (ReturningColumnsOrder) {
318376 auto kikimr = DefaultKikimrRunner ();
319377
0 commit comments