@@ -2548,6 +2548,180 @@ Y_UNIT_TEST_SUITE(KqpPg) {
25482548 }
25492549 }
25502550
2551+ Y_UNIT_TEST (AlterColumnSetDefaultFromSequence) {
2552+ NKikimrConfig::TAppConfig appConfig;
2553+ appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );;
2554+ auto setting = NKikimrKqp::TKqpSetting ();
2555+ auto serverSettings = TKikimrSettings ()
2556+ .SetAppConfig (appConfig)
2557+ .SetKqpSettings ({setting});
2558+ TKikimrRunner kikimr (
2559+ serverSettings.SetWithSampleTables (false ));
2560+ auto clientConfig = NGRpcProxy::TGRpcClientConfig (kikimr.GetEndpoint ());
2561+ auto client = kikimr.GetQueryClient ();
2562+
2563+ auto session = client.GetSession ().GetValueSync ().GetSession ();
2564+
2565+ auto tableClient = kikimr.GetTableClient ();
2566+ auto tableClientSession = tableClient.CreateSession ().GetValueSync ().GetSession ();
2567+
2568+ {
2569+ auto result = session.ExecuteQuery (R"(
2570+ --!syntax_pg
2571+ CREATE TABLE Pg (
2572+ key int4 PRIMARY KEY,
2573+ value int8
2574+ );
2575+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2576+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2577+ }
2578+
2579+ {
2580+ const auto query = Q_ (R"(
2581+ --!syntax_pg
2582+ INSERT INTO Pg (key, value) values (1, 1);
2583+ )" );
2584+
2585+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2586+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2587+ }
2588+
2589+ {
2590+ const auto query = Q_ (R"(
2591+ --!syntax_pg
2592+ SELECT * FROM Pg;
2593+ )" );
2594+
2595+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2596+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2597+
2598+ UNIT_ASSERT_C (!result.GetResultSets ().empty (), " results are empty" );
2599+ CompareYson (R"(
2600+ [["1";"1"]]
2601+ )" , FormatResultSetYson (result.GetResultSet (0 )));
2602+ }
2603+
2604+ {
2605+ auto result = session.ExecuteQuery (R"(
2606+ --!syntax_pg
2607+ ALTER TABLE Pg ALTER COLUMN value SET DEFAULT nextval('seq');
2608+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2609+ UNIT_ASSERT (!result.IsSuccess ());
2610+ }
2611+
2612+ {
2613+ const auto queryCreate = R"(
2614+ --!syntax_pg
2615+ CREATE SEQUENCE IF NOT EXISTS seq1
2616+ START WITH 10
2617+ INCREMENT BY 2
2618+ MINVALUE 1
2619+ CACHE 3
2620+ CYCLE;
2621+ )" ;
2622+
2623+ auto resultCreate = session.ExecuteQuery (queryCreate, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2624+ UNIT_ASSERT_C (resultCreate.IsSuccess (), resultCreate.GetIssues ().ToString ());
2625+ }
2626+
2627+ {
2628+ auto result = session.ExecuteQuery (R"(
2629+ --!syntax_pg
2630+ ALTER TABLE Pg ALTER COLUMN value SET DEFAULT nextval('seq1');
2631+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2632+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2633+ }
2634+
2635+ {
2636+ auto runtime = kikimr.GetTestServer ().GetRuntime ();
2637+ TActorId sender = runtime->AllocateEdgeActor ();
2638+ auto describeResult = DescribeTable (&kikimr.GetTestServer (), sender, " /Root/Pg" );
2639+ UNIT_ASSERT_VALUES_EQUAL (describeResult.GetStatus (), NKikimrScheme::StatusSuccess);
2640+ const auto & tableDescription = describeResult.GetPathDescription ().GetTable ();
2641+
2642+ for (const auto & column: tableDescription.GetColumns ()) {
2643+ if (column.GetName () == " value" ) {
2644+ UNIT_ASSERT (column.HasDefaultFromSequence ());
2645+ UNIT_ASSERT (column.GetDefaultFromSequence () == " /Root/seq1" );
2646+ break ;
2647+ }
2648+ }
2649+ }
2650+
2651+ {
2652+ const auto query = Q_ (R"(
2653+ --!syntax_pg
2654+ INSERT INTO Pg (key) values (2), (3);
2655+ )" );
2656+
2657+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2658+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2659+ }
2660+
2661+ {
2662+ const auto query = Q_ (R"(
2663+ --!syntax_pg
2664+ SELECT * FROM Pg;
2665+ )" );
2666+
2667+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2668+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2669+
2670+ UNIT_ASSERT_C (!result.GetResultSets ().empty (), " results are empty" );
2671+ CompareYson (R"(
2672+ [["1";"1"];["2";"10"];["3";"12"]]
2673+ )" , FormatResultSetYson (result.GetResultSet (0 )));
2674+ }
2675+
2676+ {
2677+ const auto queryCreate = R"(
2678+ --!syntax_pg
2679+ CREATE SEQUENCE IF NOT EXISTS seq2
2680+ START WITH 5
2681+ INCREMENT BY 3
2682+ MINVALUE 1
2683+ CACHE 3
2684+ CYCLE;
2685+ )" ;
2686+
2687+ auto resultCreate = session.ExecuteQuery (queryCreate, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2688+ UNIT_ASSERT_C (resultCreate.IsSuccess (), resultCreate.GetIssues ().ToString ());
2689+ }
2690+
2691+ {
2692+ auto result = session.ExecuteQuery (R"(
2693+ --!syntax_pg
2694+ ALTER TABLE Pg ALTER COLUMN value SET DEFAULT nextval('seq2');
2695+ )" , NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
2696+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2697+ }
2698+
2699+ {
2700+ const auto query = Q_ (R"(
2701+ --!syntax_pg
2702+ INSERT INTO Pg (key) values (4), (5);
2703+ )" );
2704+
2705+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2706+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2707+ }
2708+
2709+ {
2710+ const auto query = Q_ (R"(
2711+ --!syntax_pg
2712+ SELECT * FROM Pg;
2713+ )" );
2714+
2715+ auto result = tableClientSession.ExecuteDataQuery (query, TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2716+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
2717+
2718+ UNIT_ASSERT_C (!result.GetResultSets ().empty (), " results are empty" );
2719+ CompareYson (R"(
2720+ [["1";"1"];["2";"10"];["3";"12"];["4";"5"];["5";"8"]]
2721+ )" , FormatResultSetYson (result.GetResultSet (0 )));
2722+ }
2723+ }
2724+
25512725 Y_UNIT_TEST (TempTablesSessionsIsolation) {
25522726 NKikimrConfig::TAppConfig appConfig;
25532727 appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
0 commit comments