diff options
author | nsofya <nsofya@yandex-team.com> | 2023-06-06 13:39:10 +0300 |
---|---|---|
committer | nsofya <nsofya@yandex-team.com> | 2023-06-06 13:39:10 +0300 |
commit | 158fd4c99f92da521814681c90072d02efb92be3 (patch) | |
tree | 234cd8ba491a413d2d9de74b5efa8dc52a86d5cf | |
parent | ed277181e5a96f90f07fb040d45772242919c09d (diff) | |
download | ydb-158fd4c99f92da521814681c90072d02efb92be3.tar.gz |
Operation for DROP COLUMN
TConclusionSpecialStatus
Register drop column operation
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))); } |