@@ -2483,6 +2483,167 @@ Y_UNIT_TEST_SUITE(KqpPg) {
24832483 }
24842484 }
24852485
2486+ Y_UNIT_TEST (AlterTempTables) {
2487+ NKikimrConfig::TAppConfig appConfig;
2488+ appConfig.MutableTableServiceConfig ()->SetEnablePreparedDdl (true );
2489+ auto setting = NKikimrKqp::TKqpSetting ();
2490+ auto serverSettings = TKikimrSettings ()
2491+ .SetAppConfig (appConfig)
2492+ .SetKqpSettings ({setting});
2493+ TKikimrRunner kikimr (
2494+ serverSettings.SetWithSampleTables (false ).SetEnableTempTables (true ));
2495+ auto clientConfig = NGRpcProxy::TGRpcClientConfig (kikimr.GetEndpoint ());
2496+ auto client = kikimr.GetQueryClient ();
2497+
2498+ auto settings = NYdb::NQuery::TExecuteQuerySettings ()
2499+ .Syntax (NYdb::NQuery::ESyntax::Pg)
2500+ .StatsMode (NYdb::NQuery::EStatsMode::Basic);
2501+ {
2502+ auto session = client.GetSession ().GetValueSync ().GetSession ();
2503+ auto id = session.GetId ();
2504+ {
2505+ const auto query = Q_ (R"(
2506+ --!syntax_pg
2507+ CREATE TABLE PgTemp (
2508+ key int2 PRIMARY KEY,
2509+ value int2))" );
2510+
2511+ auto result =
2512+ session.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2513+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2514+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2515+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2516+ }
2517+
2518+ {
2519+ auto result = session.ExecuteSchemeQuery (R"(
2520+ ALTER TABLE PgTemp DROP COLUMN value;
2521+ )" , NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2522+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2523+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2524+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2525+ }
2526+
2527+ {
2528+ const auto query = Q_ (R"(
2529+ --!syntax_pg
2530+ DROP TABLE PgTemp;
2531+ )" );
2532+
2533+ auto result =
2534+ session.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2535+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2536+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2537+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2538+ }
2539+
2540+ {
2541+ const auto query = Q_ (R"(
2542+ --!syntax_pg
2543+ CREATE TABLE PgTemp (
2544+ key int2 PRIMARY KEY,
2545+ value int2))" );
2546+
2547+ auto result =
2548+ session.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2549+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2550+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2551+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2552+
2553+ auto resultInsert = session.ExecuteQuery (R"(
2554+ INSERT INTO PgTemp VALUES(1, 1);
2555+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx (), settings).ExtractValueSync ();
2556+ UNIT_ASSERT_VALUES_EQUAL_C (
2557+ resultInsert.GetStatus (), EStatus::SUCCESS, resultInsert.GetIssues ().ToString ());
2558+ }
2559+
2560+ {
2561+ const auto query = Q_ (R"(
2562+ --!syntax_pg
2563+ SELECT * FROM PgTemp;
2564+ )" );
2565+
2566+ auto result = session.ExecuteQuery (
2567+ query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx (), settings).ExtractValueSync ();
2568+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2569+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2570+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2571+
2572+ UNIT_ASSERT_C (!result.GetResultSets ().empty (), " results are empty" );
2573+ CompareYson (R"(
2574+ [["1";"1"]]
2575+ )" , FormatResultSetYson (result.GetResultSet (0 )));
2576+ }
2577+
2578+ {
2579+ auto result = session.ExecuteSchemeQuery (R"(
2580+ ALTER TABLE PgTemp DROP COLUMN value;
2581+ )" , NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2582+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2583+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2584+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2585+ }
2586+
2587+ {
2588+ const auto query = Q_ (R"(
2589+ --!syntax_pg
2590+ SELECT * FROM PgTemp;
2591+ )" );
2592+
2593+ auto result = session.ExecuteQuery (
2594+ query, NYdb::NQuery::TTxControl::BeginTx ().CommitTx (), settings).ExtractValueSync ();
2595+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2596+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2597+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2598+
2599+ UNIT_ASSERT_C (!result.GetResultSets ().empty (), " results are empty" );
2600+ CompareYson (R"(
2601+ [["1"]]
2602+ )" , FormatResultSetYson (result.GetResultSet (0 )));
2603+ }
2604+
2605+ {
2606+ const auto query = Q_ (R"(
2607+ --!syntax_pg
2608+ DROP TABLE PgTemp;
2609+ )" );
2610+
2611+ auto result =
2612+ session.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx (), settings).ExtractValueSync ();
2613+ UNIT_ASSERT_C (result.IsSuccess (), result.GetIssues ().ToString ());
2614+ auto stats = NYdb::TProtoAccessor::GetProto (*result.GetStats ());
2615+ UNIT_ASSERT_VALUES_EQUAL (stats.compilation ().from_cache (), false );
2616+ }
2617+
2618+ {
2619+ const auto querySelect = Q_ (R"(
2620+ --!syntax_pg
2621+ SELECT * FROM PgTemp;
2622+ )" );
2623+
2624+ auto resultSelect = client.ExecuteQuery (
2625+ querySelect, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2626+ UNIT_ASSERT (!resultSelect.IsSuccess ());
2627+ }
2628+
2629+ bool allDoneOk = true ;
2630+ NTestHelpers::CheckDelete (clientConfig, id, Ydb::StatusIds::SUCCESS, allDoneOk);
2631+
2632+ UNIT_ASSERT (allDoneOk);
2633+ }
2634+
2635+ {
2636+ const auto querySelect = Q_ (R"(
2637+ --!syntax_pg
2638+ SELECT * FROM PgTemp;
2639+ )" );
2640+
2641+ auto resultSelect = client.ExecuteQuery (
2642+ querySelect, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
2643+ UNIT_ASSERT (!resultSelect.IsSuccess ());
2644+ }
2645+ }
2646+
24862647 Y_UNIT_TEST (ValuesInsert) {
24872648 TKikimrRunner kikimr (NKqp::TKikimrSettings ().SetWithSampleTables (false ));
24882649 auto testSingleType = [&kikimr] (const TPgTypeTestSpec& spec) {
0 commit comments