aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornsofya <nsofya@yandex-team.com>2023-06-06 13:39:10 +0300
committernsofya <nsofya@yandex-team.com>2023-06-06 13:39:10 +0300
commit158fd4c99f92da521814681c90072d02efb92be3 (patch)
tree234cd8ba491a413d2d9de74b5efa8dc52a86d5cf
parented277181e5a96f90f07fb040d45772242919c09d (diff)
downloadydb-158fd4c99f92da521814681c90072d02efb92be3.tar.gz
Operation for DROP COLUMN
TConclusionSpecialStatus Register drop column operation
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/manager.cpp20
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/manager.h3
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp23
-rw-r--r--ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.h20
-rw-r--r--ydb/core/kqp/gateway/kqp_ic_gateway.cpp13
-rw-r--r--ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp48
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_olap_types.cpp4
-rw-r--r--ydb/library/conclusion/status.h69
-rw-r--r--ydb/services/metadata/manager/abstract.cpp12
-rw-r--r--ydb/services/metadata/manager/abstract.h9
-rw-r--r--ydb/services/metadata/manager/generic_manager.h29
15 files changed, 211 insertions, 43 deletions
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/manager.cpp b/ydb/core/kqp/gateway/behaviour/tablestore/manager.cpp
index ac8987f8983..431921c5b54 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/manager.cpp
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/manager.cpp
@@ -11,32 +11,32 @@
namespace NKikimr::NKqp {
-NThreading::TFuture<TConclusionStatus> TTableStoreManager::DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
+NThreading::TFuture<TTableStoreManager::TYqlConclusionStatus> TTableStoreManager::DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
NMetadata::IClassBehaviour::TPtr manager, TInternalModificationContext& context) const {
Y_UNUSED(nodeId);
Y_UNUSED(manager);
- auto promise = NThreading::NewPromise<TConclusionStatus>();
+ auto promise = NThreading::NewPromise<TYqlConclusionStatus>();
auto result = promise.GetFuture();
switch (context.GetActivityType()) {
case EActivityType::Create:
case EActivityType::Drop:
case EActivityType::Undefined:
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("not implemented"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("not implemented"));
case EActivityType::Alter:
try {
auto actionName = settings.GetFeaturesExtractor().Extract("ACTION");
if (!actionName) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("can't find ACTION parameter"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("can't find ACTION parameter"));
}
ITableStoreOperation::TPtr operation(ITableStoreOperation::TFactory::Construct(*actionName));
if (!operation) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("invalid ACTION: " + *actionName));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("invalid ACTION: " + *actionName));
}
{
auto parsingResult = operation->Deserialize(settings);
if (!parsingResult) {
- return NThreading::MakeFuture<TConclusionStatus>(parsingResult);
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail(parsingResult.GetErrorMessage()));
}
}
auto ev = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
@@ -51,14 +51,14 @@ NThreading::TFuture<TConclusionStatus> TTableStoreManager::DoModify(const NYql::
TActivationContext::AsActorContext().Register(new NKqp::TSchemeOpRequestHandler(ev.Release(), promiseScheme, false));
return promiseScheme.GetFuture().Apply([](const NThreading::TFuture<NKqp::TSchemeOpRequestHandler::TResult>& f) {
if (f.HasValue() && !f.HasException() && f.GetValue().Success()) {
- return TConclusionStatus::Success();
+ return TYqlConclusionStatus::Success();
} else if (f.HasValue()) {
- return TConclusionStatus::Fail(f.GetValue().Issues().ToString());
+ return TYqlConclusionStatus::Fail(f.GetValue().Status(), f.GetValue().Issues().ToString());
}
- return TConclusionStatus::Fail("no value in result");
+ return TYqlConclusionStatus::Fail("no value in result");
});
} catch (yexception& e) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail(e.what()));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail(e.what()));
}
}
return result;
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/manager.h b/ydb/core/kqp/gateway/behaviour/tablestore/manager.h
index d9cf3fad03a..524356adc82 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/manager.h
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/manager.h
@@ -8,9 +8,10 @@ namespace NKikimr::NKqp {
class TTableStoreManager: public NMetadata::NModifications::IOperationsManager {
protected:
- NThreading::TFuture<TConclusionStatus> DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
+ NThreading::TFuture<TYqlConclusionStatus> DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
NMetadata::IClassBehaviour::TPtr manager, TInternalModificationContext& context) const override;
public:
+ using NMetadata::NModifications::IOperationsManager::TYqlConclusionStatus;
};
}
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.darwin-x86_64.txt b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.darwin-x86_64.txt
index f711deb34e8..1fce41a4875 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.darwin-x86_64.txt
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.darwin-x86_64.txt
@@ -36,4 +36,5 @@ target_link_libraries(behaviour-tablestore-operations.global PUBLIC
target_sources(behaviour-tablestore-operations.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/add_column.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/alter_column.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
)
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-aarch64.txt b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-aarch64.txt
index 7c5eb393e2a..f280dd08128 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-aarch64.txt
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-aarch64.txt
@@ -38,4 +38,5 @@ target_link_libraries(behaviour-tablestore-operations.global PUBLIC
target_sources(behaviour-tablestore-operations.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/add_column.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/alter_column.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
)
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-x86_64.txt b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-x86_64.txt
index 7c5eb393e2a..f280dd08128 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-x86_64.txt
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.linux-x86_64.txt
@@ -38,4 +38,5 @@ target_link_libraries(behaviour-tablestore-operations.global PUBLIC
target_sources(behaviour-tablestore-operations.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/add_column.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/alter_column.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
)
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.windows-x86_64.txt b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.windows-x86_64.txt
index f711deb34e8..1fce41a4875 100644
--- a/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.windows-x86_64.txt
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/CMakeLists.windows-x86_64.txt
@@ -36,4 +36,5 @@ target_link_libraries(behaviour-tablestore-operations.global PUBLIC
target_sources(behaviour-tablestore-operations.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/add_column.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/alter_column.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
)
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp b/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
new file mode 100644
index 00000000000..6267cb9dc5f
--- /dev/null
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.cpp
@@ -0,0 +1,23 @@
+#include "drop_column.h"
+#include <util/string/type.h>
+
+namespace NKikimr::NKqp {
+
+TConclusionStatus TDropColumnOperation::DoDeserialize(NYql::TObjectSettingsImpl::TFeaturesExtractor& features) {
+ {
+ auto fValue = features.Extract("NAME");
+ if (!fValue) {
+ return TConclusionStatus::Fail("can't find alter parameter NAME");
+ }
+ ColumnName = *fValue;
+ }
+ return TConclusionStatus::Success();
+}
+
+void TDropColumnOperation::DoSerializeScheme(NKikimrSchemeOp::TAlterColumnTableSchemaPreset& presetProto) const {
+ auto schemaData = presetProto.MutableAlterSchema();
+ auto column = schemaData->AddDropColumns();
+ column->SetName(ColumnName);
+}
+
+}
diff --git a/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.h b/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.h
new file mode 100644
index 00000000000..1353ef5f5a6
--- /dev/null
+++ b/ydb/core/kqp/gateway/behaviour/tablestore/operations/drop_column.h
@@ -0,0 +1,20 @@
+#include "abstract.h"
+
+namespace NKikimr::NKqp {
+
+class TDropColumnOperation : public ITableStoreOperation {
+ static TString GetTypeName() {
+ return "DROP_COLUMN";
+ }
+
+ static inline auto Registrator = TFactory::TRegistrator<TDropColumnOperation>(GetTypeName());
+private:
+ TString ColumnName;
+public:
+ TConclusionStatus DoDeserialize(NYql::TObjectSettingsImpl::TFeaturesExtractor& features) override;
+
+ void DoSerializeScheme(NKikimrSchemeOp::TAlterColumnTableSchemaPreset& presetProto) const override;
+};
+
+}
+
diff --git a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
index 49dc8961648..1953727a236 100644
--- a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
+++ b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp
@@ -1517,10 +1517,12 @@ public:
template <class TSettings>
class IObjectModifier {
+ public:
+ using TYqlConclusionStatus = TConclusionSpecialStatus<TIssuesIds::EIssueCode, TIssuesIds::SUCCESS, TIssuesIds::DEFAULT_ERROR>;
private:
TKikimrIcGateway& Owner;
protected:
- virtual TFuture<TConclusionStatus> DoExecute(
+ virtual TFuture<TYqlConclusionStatus> DoExecute(
NMetadata::IClassBehaviour::TPtr manager, const TSettings& settings,
const NMetadata::NModifications::IOperationsManager::TExternalModificationContext& context) = 0;
ui32 GetNodeId() const {
@@ -1556,13 +1558,14 @@ public:
context.SetUserToken(*GetUserToken());
}
context.SetDatabase(Owner.Database);
- return DoExecute(cBehaviour, settings, context).Apply([](const NThreading::TFuture<TConclusionStatus>& f) {
+ return DoExecute(cBehaviour, settings, context).Apply([](const NThreading::TFuture<TYqlConclusionStatus>& f) {
if (f.HasValue() && !f.HasException() && f.GetValue().Ok()) {
TGenericResult result;
result.SetSuccess();
return NThreading::MakeFuture<TGenericResult>(result);
} else if (f.HasValue()) {
TGenericResult result;
+ result.SetStatus(f.GetValue().GetStatus());
result.AddIssue(NYql::TIssue(f.GetValue().GetErrorMessage()));
return NThreading::MakeFuture<TGenericResult>(result);
} else {
@@ -1581,7 +1584,7 @@ public:
private:
using TBase = IObjectModifier<NYql::TCreateObjectSettings>;
protected:
- virtual TFuture<TConclusionStatus> DoExecute(
+ virtual TFuture<TYqlConclusionStatus> DoExecute(
NMetadata::IClassBehaviour::TPtr manager, const NYql::TCreateObjectSettings& settings,
const NMetadata::NModifications::IOperationsManager::TExternalModificationContext& context) override
{
@@ -1595,7 +1598,7 @@ public:
private:
using TBase = IObjectModifier<NYql::TAlterObjectSettings>;
protected:
- virtual TFuture<TConclusionStatus> DoExecute(
+ virtual TFuture<TYqlConclusionStatus> DoExecute(
NMetadata::IClassBehaviour::TPtr manager, const NYql::TAlterObjectSettings& settings,
const NMetadata::NModifications::IOperationsManager::TExternalModificationContext& context) override {
return manager->GetOperationsManager()->AlterObject(settings, TBase::GetNodeId(), manager, context);
@@ -1608,7 +1611,7 @@ public:
private:
using TBase = IObjectModifier<NYql::TDropObjectSettings>;
protected:
- virtual TFuture<TConclusionStatus> DoExecute(
+ virtual TFuture<TYqlConclusionStatus> DoExecute(
NMetadata::IClassBehaviour::TPtr manager, const NYql::TDropObjectSettings& settings,
const NMetadata::NModifications::IOperationsManager::TExternalModificationContext& context) override {
return manager->GetOperationsManager()->DropObject(settings, TBase::GetNodeId(), manager, context);
diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
index 3ae75412bbf..64a0ff7d802 100644
--- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
+++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp
@@ -5035,12 +5035,58 @@ Y_UNIT_TEST_SUITE(KqpOlapScheme) {
testHelper.CreateTable(testTable);
{
- schema.push_back(TTestHelper::TColumnSchema().SetName("new_column").SetType(NScheme::NTypeIds::Uint64).SetNullable(false));
auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << "`ADD COLUMN new_column Uint64 NOT NULL;";
auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::SCHEME_ERROR, alterResult.GetIssues().ToString());
}
}
+
+ Y_UNIT_TEST(DropColumnErrors) {
+ TKikimrSettings runnerSettings;
+ runnerSettings.WithSampleTables = false;
+ TTestHelper testHelper(runnerSettings);
+
+ TVector<TTestHelper::TColumnSchema> schema = {
+ TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false),
+ TTestHelper::TColumnSchema().SetName("resource_id").SetType(NScheme::NTypeIds::Utf8),
+ TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32)
+ };
+ TTestHelper::TColumnTable testTable;
+
+ testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema);
+ testHelper.CreateTable(testTable);
+
+ {
+ auto alterQuery = TStringBuilder() << "ALTER TABLE `" << testTable.GetName() << "`DROP COLUMN resource_id;";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::BAD_REQUEST, alterResult.GetIssues().ToString());
+ }
+ }
+
+ Y_UNIT_TEST(DropColumnTableStoreErrors) {
+ TKikimrSettings runnerSettings;
+ runnerSettings.WithSampleTables = false;
+ TTestHelper testHelper(runnerSettings);
+
+ TVector<TTestHelper::TColumnSchema> schema = {
+ TTestHelper::TColumnSchema().SetName("id").SetType(NScheme::NTypeIds::Int32).SetNullable(false),
+ TTestHelper::TColumnSchema().SetName("resource_id").SetType(NScheme::NTypeIds::Utf8),
+ TTestHelper::TColumnSchema().SetName("level").SetType(NScheme::NTypeIds::Int32)
+ };
+ TTestHelper::TColumnTableStore testTableStore;
+
+ testTableStore.SetName("/Root/TableStoreTest").SetPrimaryKey({"id"}).SetSchema(schema);
+ testHelper.CreateTable(testTableStore);
+ TTestHelper::TColumnTable testTable;
+ testTable.SetName("/Root/TableStoreTest/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema);
+ testHelper.CreateTable(testTable);
+
+ {
+ auto alterQuery = TStringBuilder() << "ALTER TABLESTORE `" << testTableStore.GetName() << "`DROP COLUMN resource_id;";
+ auto alterResult = testHelper.GetSession().ExecuteSchemeQuery(alterQuery).GetValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(alterResult.GetStatus(), EStatus::GENERIC_ERROR, alterResult.GetIssues().ToString()); // EStatus::BAD_REQUEST
+ }
+ }
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_olap_types.cpp b/ydb/core/tx/schemeshard/schemeshard_olap_types.cpp
index 4135540e3cc..40d47523faf 100644
--- a/ydb/core/tx/schemeshard/schemeshard_olap_types.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_olap_types.cpp
@@ -210,11 +210,11 @@ namespace NKikimr::NSchemeShard {
return false;
}
if (addColumnNames.contains(columnDiff.GetName())) {
- errors.AddError(NKikimrScheme::StatusMultipleModifications, TStringBuilder() << "column '" << columnDiff.GetName() << "' have to be either add or update");
+ errors.AddError(NKikimrScheme::StatusSchemeError, TStringBuilder() << "column '" << columnDiff.GetName() << "' have to be either add or update");
return false;
}
if (alterColumnNames.contains(columnDiff.GetName())) {
- errors.AddError(NKikimrScheme::StatusMultipleModifications, TStringBuilder() << "column '" << columnDiff.GetName() << "' duplication for update");
+ errors.AddError(NKikimrScheme::StatusSchemeError, TStringBuilder() << "column '" << columnDiff.GetName() << "' duplication for update");
return false;
}
alterColumnNames.emplace(columnDiff.GetName());
diff --git a/ydb/library/conclusion/status.h b/ydb/library/conclusion/status.h
index 739d5d86a10..f35b05938b9 100644
--- a/ydb/library/conclusion/status.h
+++ b/ydb/library/conclusion/status.h
@@ -52,4 +52,73 @@ public:
}
};
+template<class TStatus, TStatus StatusOk, TStatus DefaultError>
+class TConclusionSpecialStatus {
+private:
+ std::optional<TString> ErrorMessage;
+ TStatus SpecialStatus = StatusOk;
+
+ TConclusionSpecialStatus() = default;
+ TConclusionSpecialStatus(const TStatus& status, const std::optional<TString>& errorMessage = {})
+ : ErrorMessage(errorMessage)
+ , SpecialStatus(status)
+ {
+ Y_VERIFY(!!ErrorMessage);
+ }
+
+ TConclusionSpecialStatus(const TStatus& status,const char* errorMessage)
+ : ErrorMessage(errorMessage)
+ , SpecialStatus(status)
+ {
+ Y_VERIFY(!!ErrorMessage);
+ }
+public:
+
+ const TString& GetErrorMessage() const {
+ return ErrorMessage ? *ErrorMessage : Default<TString>();
+ }
+
+ static TConclusionSpecialStatus Fail(const char* errorMessage) {
+ return Fail(DefaultError, errorMessage);
+ }
+
+ static TConclusionSpecialStatus Fail(const TString& errorMessage) {
+ return Fail(DefaultError, errorMessage);
+ }
+
+ static TConclusionSpecialStatus Fail(const TStatus& status, const char* errorMessage) {
+ Y_VERIFY(status != StatusOk);
+ return TConclusionSpecialStatus(status, errorMessage);
+ }
+
+ static TConclusionSpecialStatus Fail(const TStatus& status, const TString& errorMessage) {
+ Y_VERIFY(status != StatusOk);
+ return TConclusionSpecialStatus(status, errorMessage);
+ }
+
+ const TStatus& GetStatus() const {
+ return SpecialStatus;
+ }
+
+ bool IsFail() const {
+ return !Ok();
+ }
+
+ bool Ok() const {
+ return SpecialStatus == StatusOk;
+ }
+
+ bool operator!() const {
+ return !Ok();
+ }
+
+ explicit operator bool() const {
+ return Ok();
+ }
+
+ static TConclusionSpecialStatus Success() {
+ return TConclusionSpecialStatus();
+ }
+};
+
}
diff --git a/ydb/services/metadata/manager/abstract.cpp b/ydb/services/metadata/manager/abstract.cpp
index a039dc9db20..03807899633 100644
--- a/ydb/services/metadata/manager/abstract.cpp
+++ b/ydb/services/metadata/manager/abstract.cpp
@@ -34,33 +34,33 @@ NKikimr::NMetadata::NModifications::TTableSchema& TTableSchema::AddColumn(const
return *this;
}
-NThreading::TFuture<TConclusionStatus> IOperationsManager::DropObject(const NYql::TDropObjectSettings& settings,
+NThreading::TFuture<IOperationsManager::TYqlConclusionStatus> IOperationsManager::DropObject(const NYql::TDropObjectSettings& settings,
const ui32 nodeId, IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const
{
if (!NMetadata::NProvider::TServiceOperator::IsEnabled()) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("metadata provider service is disabled"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("metadata provider service is disabled"));
}
TInternalModificationContext internalContext(context);
internalContext.SetActivityType(EActivityType::Drop);
return DoModify(settings, nodeId, manager, internalContext);
}
-NThreading::TFuture<TConclusionStatus> IOperationsManager::AlterObject(const NYql::TAlterObjectSettings& settings,
+NThreading::TFuture<IOperationsManager::TYqlConclusionStatus> IOperationsManager::AlterObject(const NYql::TAlterObjectSettings& settings,
const ui32 nodeId, IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const
{
if (!NMetadata::NProvider::TServiceOperator::IsEnabled()) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("metadata provider service is disabled"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("metadata provider service is disabled"));
}
TInternalModificationContext internalContext(context);
internalContext.SetActivityType(EActivityType::Alter);
return DoModify(settings, nodeId, manager, internalContext);
}
-NThreading::TFuture<TConclusionStatus> IOperationsManager::CreateObject(const NYql::TCreateObjectSettings& settings,
+NThreading::TFuture<IOperationsManager::TYqlConclusionStatus> IOperationsManager::CreateObject(const NYql::TCreateObjectSettings& settings,
const ui32 nodeId, IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const
{
if (!NMetadata::NProvider::TServiceOperator::IsEnabled()) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("metadata provider service is disabled"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("metadata provider service is disabled"));
}
TInternalModificationContext internalContext(context);
internalContext.SetActivityType(EActivityType::Create);
diff --git a/ydb/services/metadata/manager/abstract.h b/ydb/services/metadata/manager/abstract.h
index f761061f9c4..97495823721 100644
--- a/ydb/services/metadata/manager/abstract.h
+++ b/ydb/services/metadata/manager/abstract.h
@@ -48,6 +48,7 @@ public:
class IOperationsManager {
public:
using TPtr = std::shared_ptr<IOperationsManager>;
+ using TYqlConclusionStatus = TConclusionSpecialStatus<NYql::TIssuesIds::EIssueCode, NYql::TIssuesIds::SUCCESS, NYql::TIssuesIds::DEFAULT_ERROR>;
enum class EActivityType {
Undefined,
@@ -76,18 +77,18 @@ public:
private:
YDB_ACCESSOR_DEF(std::optional<TTableSchema>, ActualSchema);
protected:
- virtual NThreading::TFuture<TConclusionStatus> DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
+ virtual NThreading::TFuture<TYqlConclusionStatus> DoModify(const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
IClassBehaviour::TPtr manager, TInternalModificationContext& context) const = 0;
public:
virtual ~IOperationsManager() = default;
- NThreading::TFuture<TConclusionStatus> CreateObject(const NYql::TCreateObjectSettings& settings, const ui32 nodeId,
+ NThreading::TFuture<TYqlConclusionStatus> CreateObject(const NYql::TCreateObjectSettings& settings, const ui32 nodeId,
IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const;
- NThreading::TFuture<TConclusionStatus> AlterObject(const NYql::TAlterObjectSettings& settings, const ui32 nodeId,
+ NThreading::TFuture<TYqlConclusionStatus> AlterObject(const NYql::TAlterObjectSettings& settings, const ui32 nodeId,
IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const;
- NThreading::TFuture<TConclusionStatus> DropObject(const NYql::TDropObjectSettings& settings, const ui32 nodeId,
+ NThreading::TFuture<TYqlConclusionStatus> DropObject(const NYql::TDropObjectSettings& settings, const ui32 nodeId,
IClassBehaviour::TPtr manager, const TExternalModificationContext& context) const;
const TTableSchema& GetSchema() const {
diff --git a/ydb/services/metadata/manager/generic_manager.h b/ydb/services/metadata/manager/generic_manager.h
index 473badf2ce7..cae577e4d48 100644
--- a/ydb/services/metadata/manager/generic_manager.h
+++ b/ydb/services/metadata/manager/generic_manager.h
@@ -6,19 +6,19 @@ namespace NKikimr::NMetadata::NModifications {
class TOperationsController: public IAlterController {
private:
- YDB_READONLY_DEF(NThreading::TPromise<TConclusionStatus>, Promise);
+ YDB_READONLY_DEF(NThreading::TPromise<IOperationsManager::TYqlConclusionStatus>, Promise);
public:
- TOperationsController(NThreading::TPromise<TConclusionStatus>&& p)
+ TOperationsController(NThreading::TPromise<IOperationsManager::TYqlConclusionStatus>&& p)
: Promise(std::move(p))
{
}
virtual void OnAlteringProblem(const TString& errorMessage) override {
- Promise.SetValue(TConclusionStatus::Fail(errorMessage));
+ Promise.SetValue(IOperationsManager::TYqlConclusionStatus::Fail(errorMessage));
}
virtual void OnAlteringFinished() override {
- Promise.SetValue(TConclusionStatus::Success());
+ Promise.SetValue(IOperationsManager::TYqlConclusionStatus::Success());
}
};
@@ -27,40 +27,41 @@ template <class T>
class TGenericOperationsManager: public IObjectOperationsManager<T> {
private:
using TBase = IObjectOperationsManager<T>;
+ using IOperationsManager::TYqlConclusionStatus;
public:
using TInternalModificationContext = typename TBase::TInternalModificationContext;
protected:
- virtual NThreading::TFuture<TConclusionStatus> DoModify(
+ virtual NThreading::TFuture<TYqlConclusionStatus> DoModify(
const NYql::TObjectSettingsImpl& settings, const ui32 nodeId,
IClassBehaviour::TPtr manager, TInternalModificationContext& context) const override
{
if (!manager) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("modification object behaviour not initialized"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("modification object behaviour not initialized"));
}
if (!manager->GetOperationsManager()) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("modification is unavailable for " + manager->GetTypeId()));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("modification is unavailable for " + manager->GetTypeId()));
}
- auto promise = NThreading::NewPromise<TConclusionStatus>();
+ auto promise = NThreading::NewPromise<TYqlConclusionStatus>();
auto result = promise.GetFuture();
{
TOperationParsingResult patch(TBase::BuildPatchFromSettings(settings, context));
if (!patch.IsSuccess()) {
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail(patch.GetErrorMessage()));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail(patch.GetErrorMessage()));
}
- auto c = std::make_shared<TOperationsController>(std::move(promise));
+ auto controller = std::make_shared<TOperationsController>(std::move(promise));
IAlterCommand::TPtr alterCommand;
switch (context.GetActivityType()) {
case IOperationsManager::EActivityType::Create:
- alterCommand = std::make_shared<TCreateCommand<T>>(patch.GetResult(), manager, c, context);
+ alterCommand = std::make_shared<TCreateCommand<T>>(patch.GetResult(), manager, controller, context);
break;
case IOperationsManager::EActivityType::Alter:
- alterCommand = std::make_shared<TAlterCommand<T>>(patch.GetResult(), manager, c, context);
+ alterCommand = std::make_shared<TAlterCommand<T>>(patch.GetResult(), manager, controller, context);
break;
case IOperationsManager::EActivityType::Drop:
- alterCommand = std::make_shared<TDropCommand<T>>(patch.GetResult(), manager, c, context);
+ alterCommand = std::make_shared<TDropCommand<T>>(patch.GetResult(), manager, controller, context);
break;
case IOperationsManager::EActivityType::Undefined:
- return NThreading::MakeFuture<TConclusionStatus>(TConclusionStatus::Fail("undefined action type"));
+ return NThreading::MakeFuture<TYqlConclusionStatus>(TYqlConclusionStatus::Fail("undefined action type"));
}
TActivationContext::Send(new IEventHandle(NProvider::MakeServiceId(nodeId), {}, new NProvider::TEvObjectsOperation(alterCommand)));
}