@@ -314,62 +314,204 @@ Y_UNIT_TEST(ReturningSerial) {
314
314
}
315
315
}
316
316
317
+ TString ExecuteReturningQuery (TKikimrRunner& kikimr, bool queryService, TString query) {
318
+ if (queryService) {
319
+ auto qdb = kikimr.GetQueryClient ();
320
+ auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
321
+ auto result = qSession.ExecuteQuery (
322
+ query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
323
+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
324
+ return FormatResultSetYson (result.GetResultSet (0 ));
325
+ }
317
326
318
- Y_UNIT_TEST (ReturningWorksQS) {
319
- auto kikimr = DefaultKikimrRunner ();
320
327
auto db = kikimr.GetTableClient ();
321
328
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
+ auto result = session.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
329
330
UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
330
- CompareYson (R"( [
331
- [[1];[1];["Payload1"]];
332
- ])" , FormatResultSetYson (result.GetResultSet (0 )));
331
+ return FormatResultSetYson (result.GetResultSet (0 ));
333
332
}
334
333
335
- Y_UNIT_TEST (ReturningWorksIndexedUpsertV2 ) {
334
+ Y_UNIT_TEST_TWIN (ReturningWorks, QueryService ) {
336
335
auto kikimr = DefaultKikimrRunner ();
337
336
auto db = kikimr.GetTableClient ();
338
337
auto session = db.CreateSession ().GetValueSync ().GetSession ();
339
338
CreateSampleTablesWithIndex (session, true );
339
+ CompareYson (
340
+ R"( [[[101];[101];["Payload1"]];])" ,
341
+ ExecuteReturningQuery (kikimr, QueryService, R"(
342
+ UPSERT INTO `/Root/SecondaryKeys` (Key, Fk, Value) VALUES (101, 101, "Payload1") RETURNING *;
343
+ )" )
344
+ );
345
+ CompareYson (
346
+ R"(
347
+ [[#;#;["Payload8"]];
348
+ [[1];[1];["Payload1"]];
349
+ [[2];[2];["Payload2"]];
350
+ [[5];[5];["Payload5"]];
351
+ [#;[7];["Payload7"]];
352
+ [[101];[101];["Payload1"]]
353
+ ])" ,
354
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
355
+ );
356
+ }
340
357
341
- auto qdb = kikimr.GetQueryClient ();
342
- auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
343
- auto result = qSession.ExecuteQuery (R"(
358
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedUpsert, QueryService) {
359
+ auto kikimr = DefaultKikimrRunner ();
360
+ auto db = kikimr.GetTableClient ();
361
+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
362
+ CreateSampleTablesWithIndex (session, true );
363
+ CompareYson (R"( [
364
+ [[110];[110];["Payload5"]];
365
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
344
366
$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
367
$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
368
UPSERT INTO `/Root/SecondaryKeys`
347
369
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 ());
370
+ )" ));
371
+ CompareYson (
372
+ R"(
373
+ [[#;#;["Payload8"]];
374
+ [[1];[1];["Payload1"]];
375
+ [[2];[2];["Payload2"]];
376
+ [[5];[5];["Payload5"]];
377
+ [#;[7];["Payload7"]];
378
+ [[110];[110];["Payload5"]]
379
+ ])" ,
380
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
381
+ );
382
+ }
383
+
384
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedDelete, QueryService) {
385
+ auto kikimr = DefaultKikimrRunner ();
386
+ auto db = kikimr.GetTableClient ();
387
+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
388
+ CreateSampleTablesWithIndex (session, true );
350
389
CompareYson (R"( [
351
- [[110];[110];["Payload5"]];
352
- ])" , FormatResultSetYson (result.GetResultSet (0 )));
390
+ [[5];[5];["Payload5"]];
391
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
392
+ $v1 = (SELECT Key, Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL AND Key >= 1);
393
+ $v2 = (SELECT Key, Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL AND Key <= 5);
394
+ DELETE FROM `/Root/SecondaryKeys` ON
395
+ SELECT * FROM (SELECT * FROM $v1 UNION ALL SELECT * FROM $v2) WHERE Key >= 5 RETURNING *;
396
+ )" ));
397
+ CompareYson (
398
+ R"(
399
+ [[#;#;["Payload8"]];
400
+ [[1];[1];["Payload1"]];
401
+ [[2];[2];["Payload2"]];
402
+ [#;[7];["Payload7"]];
403
+ ])" ,
404
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
405
+ );
353
406
}
354
407
355
- Y_UNIT_TEST (ReturningWorksIndexedInsertV3 ) {
408
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedDeleteV2, QueryService ) {
356
409
auto kikimr = DefaultKikimrRunner ();
357
410
auto db = kikimr.GetTableClient ();
358
411
auto session = db.CreateSession ().GetValueSync ().GetSession ();
359
412
CreateSampleTablesWithIndex (session, true );
413
+ CompareYson (R"( [
414
+ [[1];[1];["Payload1"]];
415
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
416
+ DELETE FROM `/Root/SecondaryKeys` WHERE Key = 1 RETURNING *;
417
+ )" ));
418
+ CompareYson (
419
+ R"(
420
+ [[#;#;["Payload8"]];
421
+ [[2];[2];["Payload2"]];
422
+ [[5];[5];["Payload5"]];
423
+ [#;[7];["Payload7"]];
424
+ ])" ,
425
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
426
+ );
427
+ }
360
428
361
- auto qdb = kikimr.GetQueryClient ();
362
- auto qSession = qdb.GetSession ().GetValueSync ().GetSession ();
363
- auto result = qSession.ExecuteQuery (R"(
429
+
430
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedInsert, QueryService) {
431
+ auto kikimr = DefaultKikimrRunner ();
432
+ auto db = kikimr.GetTableClient ();
433
+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
434
+ CreateSampleTablesWithIndex (session, true );
435
+
436
+ CompareYson (R"( [
437
+ [[101];[101];["Payload1"]];
438
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
364
439
$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
440
$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
441
INSERT INTO `/Root/SecondaryKeys`
367
442
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 ());
443
+ )" ));
444
+
445
+ CompareYson (
446
+ R"(
447
+ [[#;#;["Payload8"]];
448
+ [[1];[1];["Payload1"]];
449
+ [[2];[2];["Payload2"]];
450
+ [[5];[5];["Payload5"]];
451
+ [#;[7];["Payload7"]];
452
+ [[101];[101];["Payload1"]]
453
+ ])" ,
454
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
455
+ );
456
+ }
457
+
458
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedReplace, QueryService) {
459
+ auto kikimr = DefaultKikimrRunner ();
460
+ auto db = kikimr.GetTableClient ();
461
+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
462
+ CreateSampleTablesWithIndex (session, true );
463
+
370
464
CompareYson (R"( [
371
465
[[101];[101];["Payload1"]];
372
- ])" , FormatResultSetYson (result.GetResultSet (0 )));
466
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
467
+ $v1 = (SELECT Key + 100 as Key, Fk + 100 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
468
+ $v2 = (SELECT Key + 205 as Key, Fk + 205 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
469
+ REPLACE INTO `/Root/SecondaryKeys`
470
+ SELECT * FROM (SELECT * FROM $v1 UNION ALL SELECT * FROM $v2 ) WHERE Key < 102 RETURNING *;
471
+ )" ));
472
+
473
+ CompareYson (
474
+ R"(
475
+ [[#;#;["Payload8"]];
476
+ [[1];[1];["Payload1"]];
477
+ [[2];[2];["Payload2"]];
478
+ [[5];[5];["Payload5"]];
479
+ [#;[7];["Payload7"]];
480
+ [[101];[101];["Payload1"]]
481
+ ])" ,
482
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT * FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
483
+ );
484
+ }
485
+
486
+ Y_UNIT_TEST_TWIN (ReturningWorksIndexedOperationsWithDefault, QueryService) {
487
+ auto kikimr = DefaultKikimrRunner ();
488
+ auto db = kikimr.GetTableClient ();
489
+ auto session = db.CreateSession ().GetValueSync ().GetSession ();
490
+ {
491
+ auto res = session.ExecuteSchemeQuery (R"(
492
+ --!syntax_v1
493
+ CREATE TABLE `/Root/SecondaryKeys` (
494
+ Key Serial,
495
+ Fk Int32,
496
+ Value String,
497
+ PRIMARY KEY (Key),
498
+ INDEX Index GLOBAL ON (Fk)
499
+ );
500
+ )" ).GetValueSync ();
501
+ }
502
+
503
+ CompareYson (R"( [
504
+ [1;[1];["Payload"]];
505
+ ])" , ExecuteReturningQuery (kikimr, QueryService, R"(
506
+ REPLACE INTO `/Root/SecondaryKeys` (Fk, Value) VALUES (1, "Payload") RETURNING Key, Fk, Value;
507
+ )" ));
508
+
509
+ CompareYson (
510
+ R"( [
511
+ [1;[1];["Payload"]];
512
+ ])" ,
513
+ ExecuteReturningQuery (kikimr, QueryService, " SELECT Key, Fk, Value FROM `/Root/SecondaryKeys` ORDER BY Key, Fk;" )
514
+ );
373
515
}
374
516
375
517
Y_UNIT_TEST (ReturningColumnsOrder) {
0 commit comments