#include #include #include #include #include #include #include namespace DB { BlockIO InterpreterDropAccessEntityQuery::execute() { const auto & query = query_ptr->as(); auto & access_control = context.getAccessControlManager(); using Kind = ASTDropAccessEntityQuery::Kind; switch (query.kind) { case Kind::QUOTA: { context.checkQuotaManagementIsAllowed(); if (query.if_exists) access_control.tryRemove(access_control.find(query.names)); else access_control.remove(access_control.getIDs(query.names)); return {}; } case Kind::ROW_POLICY: { context.checkRowPolicyManagementIsAllowed(); Strings full_names; boost::range::transform( query.row_policies_names, std::back_inserter(full_names), [this](const RowPolicy::FullNameParts & row_policy_name) { return row_policy_name.getFullName(context); }); if (query.if_exists) access_control.tryRemove(access_control.find(full_names)); else access_control.remove(access_control.getIDs(full_names)); return {}; } } __builtin_unreachable(); } }