aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshumkovnd <shumkovnd@yandex-team.com>2023-10-05 14:48:55 +0300
committershumkovnd <shumkovnd@yandex-team.com>2023-10-05 15:31:16 +0300
commit14439f5286474349a369c8ca6216649f3a4aa1c7 (patch)
tree329142c93a441f6e8c8034773e48d4435988d7de
parente5ae5aad434c0a6d577a8437c394beed4b159d3f (diff)
downloadydb-14439f5286474349a369c8ca6216649f3a4aa1c7.tar.gz
KIKIMR-19548: allow temporary for CreateIndexedTable op
-rw-r--r--ydb/core/kqp/executer_actor/kqp_scheme_executer.cpp18
-rw-r--r--ydb/core/kqp/session_actor/kqp_session_actor.cpp20
-rw-r--r--ydb/core/kqp/ut/pg/kqp_pg_ut.cpp51
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);