Skip to content

Commit a4a17ac

Browse files
gridnevvvitblinkov
authored andcommitted
add more unit tests with indexes (#15593)
1 parent abd7c1a commit a4a17ac

File tree

1 file changed

+169
-27
lines changed

1 file changed

+169
-27
lines changed

ydb/core/kqp/ut/opt/kqp_returning_ut.cpp

Lines changed: 169 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -314,62 +314,204 @@ Y_UNIT_TEST(ReturningSerial) {
314314
}
315315
}
316316

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+
}
317326

318-
Y_UNIT_TEST(ReturningWorksQS) {
319-
auto kikimr = DefaultKikimrRunner();
320327
auto db = kikimr.GetTableClient();
321328
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();
329330
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));
333332
}
334333

335-
Y_UNIT_TEST(ReturningWorksIndexedUpsertV2) {
334+
Y_UNIT_TEST_TWIN(ReturningWorks, QueryService) {
336335
auto kikimr = DefaultKikimrRunner();
337336
auto db = kikimr.GetTableClient();
338337
auto session = db.CreateSession().GetValueSync().GetSession();
339338
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+
}
340357

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"(
344366
$v1 = (SELECT Key + 100 as Key, Fk + 100 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
345367
$v2 = (SELECT Key + 105 as Key, Fk + 105 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
346368
UPSERT INTO `/Root/SecondaryKeys`
347369
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);
350389
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+
);
353406
}
354407

355-
Y_UNIT_TEST(ReturningWorksIndexedInsertV3) {
408+
Y_UNIT_TEST_TWIN(ReturningWorksIndexedDeleteV2, QueryService) {
356409
auto kikimr = DefaultKikimrRunner();
357410
auto db = kikimr.GetTableClient();
358411
auto session = db.CreateSession().GetValueSync().GetSession();
359412
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+
}
360428

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"(
364439
$v1 = (SELECT Key + 100 as Key, Fk + 100 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
365440
$v2 = (SELECT Key + 205 as Key, Fk + 205 as Fk, Value FROM `/Root/SecondaryKeys` WHERE Key IS NOT NULL AND Fk IS NOT NULL);
366441
INSERT INTO `/Root/SecondaryKeys`
367442
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+
370464
CompareYson(R"([
371465
[[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+
);
373515
}
374516

375517
Y_UNIT_TEST(ReturningColumnsOrder) {

0 commit comments

Comments
 (0)