diff options
| author | AlexSm <[email protected]> | 2024-01-04 15:09:05 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-01-04 15:09:05 +0100 |
| commit | dab291146f6cd7d35684e3a1150e5bb1c412982c (patch) | |
| tree | 36ef35f6cacb6432845a4a33f940c95871036b32 /contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp | |
| parent | 63660ad5e7512029fd0218e7a636580695a24e1f (diff) | |
Library import 5, delete go dependencies (#832)
* Library import 5, delete go dependencies
* Fix yt client
Diffstat (limited to 'contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp')
| -rw-r--r-- | contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp b/contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp deleted file mode 100644 index 49e90783a59..00000000000 --- a/contrib/clickhouse/src/Interpreters/Access/InterpreterMoveAccessEntityQuery.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include <Interpreters/Access/InterpreterMoveAccessEntityQuery.h> -#include <Parsers/Access/ASTMoveAccessEntityQuery.h> -#include <Parsers/Access/ASTRowPolicyName.h> -#include <Access/AccessControl.h> -#include <Access/Common/AccessRightsElement.h> -#include <Interpreters/executeDDLQueryOnCluster.h> - - -namespace DB -{ -namespace ErrorCodes -{ - extern const int NOT_IMPLEMENTED; - extern const int ACCESS_ENTITY_NOT_FOUND; -} - - -BlockIO InterpreterMoveAccessEntityQuery::execute() -{ - auto & query = query_ptr->as<ASTMoveAccessEntityQuery &>(); - auto & access_control = getContext()->getAccessControl(); - getContext()->checkAccess(getRequiredAccess()); - - if (!query.cluster.empty()) - return executeDDLQueryOnCluster(query_ptr, getContext()); - - query.replaceEmptyDatabase(getContext()->getCurrentDatabase()); - - std::vector<UUID> ids; - if (query.type == AccessEntityType::ROW_POLICY) - ids = access_control.getIDs(query.type, query.row_policy_names->toStrings()); - else - ids = access_control.getIDs(query.type, query.names); - - /// Validate that all entities are from the same storage. - const auto source_storage = access_control.findStorage(ids.front()); - if (!source_storage->exists(ids)) - throw Exception(ErrorCodes::ACCESS_ENTITY_NOT_FOUND, "All access entities must be from the same storage in order to be moved"); - - access_control.moveAccessEntities(ids, source_storage->getStorageName(), query.storage_name); - return {}; -} - - -AccessRightsElements InterpreterMoveAccessEntityQuery::getRequiredAccess() const -{ - const auto & query = query_ptr->as<const ASTMoveAccessEntityQuery &>(); - AccessRightsElements res; - switch (query.type) - { - case AccessEntityType::USER: - { - res.emplace_back(AccessType::DROP_USER); - res.emplace_back(AccessType::CREATE_USER); - return res; - } - case AccessEntityType::ROLE: - { - res.emplace_back(AccessType::DROP_ROLE); - res.emplace_back(AccessType::CREATE_ROLE); - return res; - } - case AccessEntityType::SETTINGS_PROFILE: - { - res.emplace_back(AccessType::DROP_SETTINGS_PROFILE); - res.emplace_back(AccessType::CREATE_SETTINGS_PROFILE); - return res; - } - case AccessEntityType::ROW_POLICY: - { - if (query.row_policy_names) - { - for (const auto & row_policy_name : query.row_policy_names->full_names) - { - res.emplace_back(AccessType::DROP_ROW_POLICY, row_policy_name.database, row_policy_name.table_name); - res.emplace_back(AccessType::CREATE_ROW_POLICY, row_policy_name.database, row_policy_name.table_name); - } - } - return res; - } - case AccessEntityType::QUOTA: - { - res.emplace_back(AccessType::DROP_QUOTA); - res.emplace_back(AccessType::CREATE_QUOTA); - return res; - } - case AccessEntityType::MAX: - break; - } - throw Exception(ErrorCodes::NOT_IMPLEMENTED, "{}: type is not supported by DROP query", toString(query.type)); -} - -} |
