diff options
author | shumkovnd <shumkovnd@yandex-team.com> | 2023-10-05 14:48:55 +0300 |
---|---|---|
committer | shumkovnd <shumkovnd@yandex-team.com> | 2023-10-05 15:31:16 +0300 |
commit | 14439f5286474349a369c8ca6216649f3a4aa1c7 (patch) | |
tree | 329142c93a441f6e8c8034773e48d4435988d7de | |
parent | e5ae5aad434c0a6d577a8437c394beed4b159d3f (diff) | |
download | ydb-14439f5286474349a369c8ca6216649f3a4aa1c7.tar.gz |
KIKIMR-19548: allow temporary for CreateIndexedTable op
-rw-r--r-- | ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp | 18 | ||||
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_session_actor.cpp | 20 | ||||
-rw-r--r-- | ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 51 |
3 files changed, 82 insertions, 7 deletions
diff --git a/ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp b/ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp index 7381fe6f5f9..f1a86f3fb84 100644 --- a/ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp +++ b/ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp @@ -60,9 +60,21 @@ public: case NKqpProto::TKqpSchemeOperation::kCreateTable: { auto modifyScheme = schemeOp.GetCreateTable(); if (Temporary) { - auto* createTable = modifyScheme.MutableCreateTable(); - createTable->SetName(createTable->GetName() + SessionId); - createTable->SetPath(createTable->GetPath() + SessionId); + NKikimrSchemeOp::TTableDescription* tableDesc = nullptr; + switch (modifyScheme.GetOperationType()) { + case NKikimrSchemeOp::ESchemeOpCreateTable: { + tableDesc = modifyScheme.MutableCreateTable(); + break; + } + case NKikimrSchemeOp::ESchemeOpCreateIndexedTable: { + tableDesc = modifyScheme.MutableCreateIndexedTable()->MutableTableDescription(); + break; + } + default: + YQL_ENSURE(false, "Unexpected operation type"); + } + tableDesc->SetName(tableDesc->GetName() + SessionId); + tableDesc->SetPath(tableDesc->GetPath() + SessionId); } ev->Record.MutableTransaction()->MutableModifyScheme()->CopyFrom(modifyScheme); break; diff --git a/ydb/core/kqp/session_actor/kqp_session_actor.cpp b/ydb/core/kqp/session_actor/kqp_session_actor.cpp index 6390be1c31d..56dca8bbf48 100644 --- a/ydb/core/kqp/session_actor/kqp_session_actor.cpp +++ b/ydb/core/kqp/session_actor/kqp_session_actor.cpp @@ -1143,11 +1143,23 @@ public: switch (schemeOperation.GetOperationCase()) { case NKqpProto::TKqpSchemeOperation::kCreateTable: { const auto& modifyScheme = schemeOperation.GetCreateTable(); - const auto& desc = modifyScheme.GetCreateTable(); + const NKikimrSchemeOp::TTableDescription* tableDesc = nullptr; + switch (modifyScheme.GetOperationType()) { + case NKikimrSchemeOp::ESchemeOpCreateTable: { + tableDesc = &modifyScheme.GetCreateTable(); + break; + } + case NKikimrSchemeOp::ESchemeOpCreateIndexedTable: { + tableDesc = &modifyScheme.GetCreateIndexedTable().GetTableDescription(); + break; + } + default: + YQL_ENSURE(false, "Unexpected operation type"); + } auto userToken = QueryState ? QueryState->UserToken : TIntrusiveConstPtr<NACLib::TUserToken>(); - if (desc.HasTemporary()) { - if (desc.GetTemporary()) { - return {{desc.GetName(), modifyScheme.GetWorkingDir(), Settings.Cluster, userToken, Settings.Database}}; + if (tableDesc->HasTemporary()) { + if (tableDesc->GetTemporary()) { + return {{tableDesc->GetName(), modifyScheme.GetWorkingDir(), Settings.Cluster, userToken, Settings.Database}}; } } break; diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index 52157145838..36a0b2e8ba7 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -1620,6 +1620,57 @@ Y_UNIT_TEST_SUITE(KqpPg) { } } + Y_UNIT_TEST(CreateTempTableSerial) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true);; + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}); + TKikimrRunner kikimr( + serverSettings.SetWithSampleTables(false).SetEnableTempTables(true)); + auto clientConfig = NGRpcProxy::TGRpcClientConfig(kikimr.GetEndpoint()); + auto client = kikimr.GetQueryClient(); + { + auto session = client.GetSession().GetValueSync().GetSession(); + auto id = session.GetId(); + + const auto queryCreate = Q_(R"( + --!syntax_pg + CREATE TEMP TABLE PgTemp ( + key serial PRIMARY KEY, + value int2))"); + + auto resultCreate = session.ExecuteQuery(queryCreate, NYdb::NQuery::TTxControl::NoTx()).ExtractValueSync(); + UNIT_ASSERT_C(resultCreate.IsSuccess(), resultCreate.GetIssues().ToString()); + + const auto querySelect = Q_(R"( + --!syntax_pg + SELECT * FROM PgTemp; + )"); + + auto resultSelect = session.ExecuteQuery( + querySelect, NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(resultSelect.IsSuccess(), resultSelect.GetIssues().ToString()); + + bool allDoneOk = true; + NTestHelpers::CheckDelete(clientConfig, id, Ydb::StatusIds::SUCCESS, allDoneOk); + + UNIT_ASSERT(allDoneOk); + } + + { + const auto querySelect = Q_(R"( + --!syntax_pg + SELECT * FROM PgTemp; + )"); + + auto resultSelect = client.ExecuteQuery( + querySelect, NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT(!resultSelect.IsSuccess()); + } + } + Y_UNIT_TEST(TempTablesSessionsIsolation) { NKikimrConfig::TAppConfig appConfig; appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); |