@@ -5511,6 +5511,271 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
5511
5511
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
5512
5512
}
5513
5513
5514
+ Y_UNIT_TEST(AlterSequence) {
5515
+ TKikimrSettings runnerSettings;
5516
+ runnerSettings.WithSampleTables = false;
5517
+ TKikimrRunner kikimr(runnerSettings);
5518
+ auto client = kikimr.GetQueryClient();
5519
+
5520
+ TString tableName = "/Root/TableTest";
5521
+
5522
+ {
5523
+ auto session = client.GetSession().GetValueSync().GetSession();
5524
+ auto id = session.GetId();
5525
+
5526
+ auto query = TStringBuilder() << R"(
5527
+ --!syntax_v1
5528
+ CREATE TABLE `)" << tableName << R"(` (
5529
+ Key Serial,
5530
+ Value String,
5531
+ PRIMARY KEY (Key)
5532
+ );
5533
+ )";
5534
+
5535
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5536
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5537
+ }
5538
+
5539
+ TString sequencePath = "/Root/TableTest/_serial_column_Key";
5540
+
5541
+ {
5542
+ auto session = client.GetSession().GetValueSync().GetSession();
5543
+ auto id = session.GetId();
5544
+
5545
+ auto query = TStringBuilder() << R"(
5546
+ --!syntax_v1
5547
+ ALTER SEQUENCE IF EXISTS `)" << sequencePath << R"(`
5548
+ START WITH 50
5549
+ INCREMENT BY 11;
5550
+ )";
5551
+
5552
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5553
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5554
+ }
5555
+
5556
+ {
5557
+ auto runtime = kikimr.GetTestServer().GetRuntime();
5558
+ TActorId sender = runtime->AllocateEdgeActor();
5559
+ auto describeResult = DescribeTable(&kikimr.GetTestServer(), sender, sequencePath);
5560
+ UNIT_ASSERT_VALUES_EQUAL(describeResult.GetStatus(), NKikimrScheme::StatusSuccess);
5561
+ auto& sequenceDescription = describeResult.GetPathDescription().GetSequenceDescription();
5562
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetName(), "_serial_column_Key");
5563
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetMinValue(), 1);
5564
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetMaxValue(), 9223372036854775807);
5565
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetStartValue(), 50);
5566
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetCache(), 1);
5567
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetIncrement(), 11);
5568
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetCycle(), false);
5569
+ UNIT_ASSERT_VALUES_EQUAL(sequenceDescription.GetDataType(), "Int64");
5570
+ }
5571
+
5572
+ {
5573
+ auto session = client.GetSession().GetValueSync().GetSession();
5574
+ auto id = session.GetId();
5575
+
5576
+ auto query = TStringBuilder() << R"(
5577
+ --!syntax_v1
5578
+ ALTER SEQUENCE IF EXISTS `)" << sequencePath << R"(`
5579
+ RESTART WITH 1000;
5580
+ )";
5581
+
5582
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5583
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5584
+ }
5585
+
5586
+ {
5587
+ auto session = client.GetSession().GetValueSync().GetSession();
5588
+ auto id = session.GetId();
5589
+
5590
+ auto query = TStringBuilder() << R"(
5591
+ --!syntax_v1
5592
+ ALTER SEQUENCE IF EXISTS `/Root/seq`
5593
+ RESTART WITH 1000;
5594
+ )";
5595
+
5596
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5597
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5598
+ }
5599
+
5600
+ {
5601
+ auto session = client.GetSession().GetValueSync().GetSession();
5602
+ auto id = session.GetId();
5603
+
5604
+ auto query = TStringBuilder() << R"(
5605
+ --!syntax_v1
5606
+ ALTER SEQUENCE `/Root/seq`
5607
+ START WITH 2000;
5608
+ )";
5609
+
5610
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5611
+ UNIT_ASSERT(!result.IsSuccess());
5612
+ }
5613
+ }
5614
+
5615
+ Y_UNIT_TEST(AlterSequenceRestartWith) {
5616
+ TKikimrSettings runnerSettings;
5617
+ runnerSettings.WithSampleTables = false;
5618
+ TKikimrRunner kikimr(runnerSettings);
5619
+ auto client = kikimr.GetQueryClient();
5620
+
5621
+ TString tableName = "/Root/TableTest";
5622
+
5623
+ auto session = client.GetSession().GetValueSync().GetSession();
5624
+
5625
+ auto tableClient = kikimr.GetTableClient();
5626
+ auto tableClientSession = tableClient.CreateSession().GetValueSync().GetSession();
5627
+
5628
+ {
5629
+ auto query = TStringBuilder() << R"(
5630
+ --!syntax_v1
5631
+ CREATE TABLE `)" << tableName << R"(` (
5632
+ Key Int64,
5633
+ Value Serial,
5634
+ PRIMARY KEY (Key)
5635
+ );
5636
+ )";
5637
+
5638
+ auto result = session.ExecuteQuery(query, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5639
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5640
+ }
5641
+
5642
+ {
5643
+ const auto query = TStringBuilder() << R"(
5644
+ --!syntax_v1
5645
+ INSERT INTO `)" << tableName << R"(` (Key, Value) VALUES (1, 1);
5646
+ )";
5647
+
5648
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5649
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5650
+ }
5651
+
5652
+ {
5653
+ const auto query = TStringBuilder() << R"(
5654
+ --!syntax_v1
5655
+ SELECT * FROM `)" << tableName << R"(`;
5656
+ )";
5657
+
5658
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5659
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
5660
+
5661
+ UNIT_ASSERT_C(!result.GetResultSets().empty(), "results are empty");
5662
+ CompareYson(R"(
5663
+ [[[1];1]]
5664
+ )", FormatResultSetYson(result.GetResultSet(0)));
5665
+ }
5666
+
5667
+ {
5668
+ const auto query = TStringBuilder() << R"(
5669
+ --!syntax_v1
5670
+ INSERT INTO `)" << tableName << R"(` (Key) VALUES (2), (3);
5671
+ )";
5672
+
5673
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5674
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5675
+ }
5676
+
5677
+ {
5678
+ const auto query = TStringBuilder() << R"(
5679
+ --!syntax_v1
5680
+ SELECT * FROM `)" << tableName << R"(`;
5681
+ )";
5682
+
5683
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5684
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
5685
+
5686
+ UNIT_ASSERT_C(!result.GetResultSets().empty(), "results are empty");
5687
+ CompareYson(R"(
5688
+ [[[1];1];[[2];1];[[3];2]]
5689
+ )", FormatResultSetYson(result.GetResultSet(0)));
5690
+ }
5691
+
5692
+ TString sequencePath = "/Root/TableTest/_serial_column_Value";
5693
+
5694
+ {
5695
+ const auto queryAlter = TStringBuilder() << R"(
5696
+ --!syntax_v1
5697
+ ALTER SEQUENCE IF EXISTS `)" << sequencePath << R"(`
5698
+ RESTART 105
5699
+ INCREMENT 2;
5700
+ )";
5701
+
5702
+ auto resultAlter = session.ExecuteQuery(queryAlter, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5703
+ UNIT_ASSERT_C(resultAlter.IsSuccess(), resultAlter.GetIssues().ToString());
5704
+ }
5705
+
5706
+ {
5707
+ const auto query = TStringBuilder() << R"(
5708
+ --!syntax_v1
5709
+ INSERT INTO `)" << tableName << R"(` (Key) VALUES (105), (107);
5710
+ )";
5711
+
5712
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5713
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5714
+ }
5715
+
5716
+ {
5717
+ const auto query = TStringBuilder() << R"(
5718
+ --!syntax_v1
5719
+ SELECT * FROM `)" << tableName << R"(`;
5720
+ )";
5721
+
5722
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5723
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
5724
+
5725
+ UNIT_ASSERT_C(!result.GetResultSets().empty(), "results are empty");
5726
+ CompareYson(R"(
5727
+ [[[1];1];[[2];1];[[3];2];[[105];105];[[107];107]]
5728
+ )", FormatResultSetYson(result.GetResultSet(0)));
5729
+ }
5730
+
5731
+ {
5732
+ const auto queryAlter = TStringBuilder() << R"(
5733
+ --!syntax_v1
5734
+ ALTER SEQUENCE IF EXISTS `)" << sequencePath << R"(`
5735
+ START 206;
5736
+ )";
5737
+
5738
+ auto resultAlter = session.ExecuteQuery(queryAlter, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5739
+ UNIT_ASSERT_C(resultAlter.IsSuccess(), resultAlter.GetIssues().ToString());
5740
+ }
5741
+
5742
+ {
5743
+ const auto queryAlter = TStringBuilder() << R"(
5744
+ --!syntax_v1
5745
+ ALTER SEQUENCE IF EXISTS `)" << sequencePath << R"(`
5746
+ RESTART;
5747
+ )";
5748
+
5749
+ auto resultAlter = session.ExecuteQuery(queryAlter, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync();
5750
+ UNIT_ASSERT_C(resultAlter.IsSuccess(), resultAlter.GetIssues().ToString());
5751
+ }
5752
+
5753
+ {
5754
+ const auto query = TStringBuilder() << R"(
5755
+ --!syntax_v1
5756
+ INSERT INTO `)" << tableName << R"(` (Key) VALUES (206), (208);
5757
+ )";
5758
+
5759
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5760
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
5761
+ }
5762
+
5763
+ {
5764
+ const auto query = TStringBuilder() << R"(
5765
+ --!syntax_v1
5766
+ SELECT * FROM `)" << tableName << R"(`;
5767
+ )";
5768
+
5769
+ auto result = tableClientSession.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
5770
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
5771
+
5772
+ UNIT_ASSERT_C(!result.GetResultSets().empty(), "results are empty");
5773
+ CompareYson(R"(
5774
+ [[[1];1];[[2];1];[[3];2];[[105];105];[[107];107];[[206];206];[[208];208]]
5775
+ )", FormatResultSetYson(result.GetResultSet(0)));
5776
+ }
5777
+ }
5778
+
5514
5779
Y_UNIT_TEST(Int8Int16) {
5515
5780
TKikimrRunner kikimr;
5516
5781
0 commit comments