Commit aceb84ad authored by Tomek Muras's avatar Tomek Muras Committed by Tim Hunt

MDL-60043 accesslib: improve query performance by removing ORDER BY

then add back the minimal necessary sorting in PHP. That part was
added by Tim Hunt.
parent 109aa076
......@@ -319,8 +319,7 @@ function get_role_definitions_uncached(array $roleids) {
$sql = "SELECT ctx.path, rc.roleid, rc.capability, rc.permission
FROM {role_capabilities} rc
JOIN {context} ctx ON rc.contextid = ctx.id
WHERE rc.roleid $sql
ORDER BY ctx.path, rc.roleid, rc.capability";
WHERE rc.roleid $sql";
$rs = $DB->get_recordset_sql($sql, $params);
foreach ($rs as $rd) {
......@@ -334,6 +333,15 @@ function get_role_definitions_uncached(array $roleids) {
}
$rs->close();
// Sometimes (e.g. get_user_capability_course_helper::get_capability_info_at_each_context)
// we process role definitinons in a way that requires we see parent contexts
// before child contexts. This sort ensures that works (and is faster than
// sorting in the SQL query).
foreach ($rdefs as $roleid => $rdef) {
ksort($rdefs[$roleid]);
}
return $rdefs;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment