MCPcopy Create free account
hub / github.com/ByConity/ByConity / execute

Method execute

src/Interpreters/InterpreterCreateSettingsProfileQuery.cpp:42–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40
41
42BlockIO InterpreterCreateSettingsProfileQuery::execute()
43{
44 auto & query = query_ptr->as<ASTCreateSettingsProfileQuery &>();
45 auto & access_control = getContext()->getAccessControlManager();
46 if (query.alter)
47 getContext()->checkAccess(AccessType::ALTER_SETTINGS_PROFILE);
48 else
49 getContext()->checkAccess(AccessType::CREATE_SETTINGS_PROFILE);
50
51 // if (!query.cluster.empty())
52 // {
53 // query.replaceCurrentUserTag(getContext()->getUserName());
54 // return executeDDLQueryOnCluster(query_ptr, getContext());
55 // }
56
57 std::optional<SettingsProfileElements> settings_from_query;
58 if (query.settings)
59 settings_from_query = SettingsProfileElements{*query.settings, access_control};
60
61 std::optional<RolesOrUsersSet> roles_from_query;
62 if (query.to_roles)
63 roles_from_query = RolesOrUsersSet{*query.to_roles, access_control, getContext()->getUserID()};
64
65 if (query.alter)
66 {
67 auto update_func = [&](const AccessEntityPtr & entity) -> AccessEntityPtr
68 {
69 auto updated_profile = typeid_cast<std::shared_ptr<SettingsProfile>>(entity->clone());
70 updateSettingsProfileFromQueryImpl(*updated_profile, query, {}, settings_from_query, roles_from_query);
71 return updated_profile;
72 };
73 if (query.if_exists)
74 {
75 auto ids = access_control.find<SettingsProfile>(query.names);
76 access_control.tryUpdate(ids, update_func);
77 }
78 else
79 access_control.update(access_control.getIDs<SettingsProfile>(query.names), update_func);
80 }
81 else
82 {
83 std::vector<AccessEntityPtr> new_profiles;
84 for (const auto & name : query.names)
85 {
86 auto new_profile = std::make_shared<SettingsProfile>();
87 updateSettingsProfileFromQueryImpl(*new_profile, query, name, settings_from_query, roles_from_query);
88 new_profiles.emplace_back(std::move(new_profile));
89 }
90
91 if (query.if_not_exists)
92 access_control.tryInsert(new_profiles);
93 else if (query.or_replace)
94 access_control.insertOrReplace(new_profiles);
95 else
96 access_control.insert(new_profiles);
97 }
98
99 return {};

Callers

nothing calls this directly

Calls 10

getUserIDMethod · 0.80
tryUpdateMethod · 0.80
tryInsertMethod · 0.80
checkAccessMethod · 0.45
cloneMethod · 0.45
updateMethod · 0.45
emplace_backMethod · 0.45
insertOrReplaceMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected