]> git.mjollnir.org Git - moodle.git/commitdiff
lib/accesslib: Performance optimisation
authormattc-catalyst <mattc-catalyst>
Fri, 20 Jul 2007 04:05:34 +0000 (04:05 +0000)
committermattc-catalyst <mattc-catalyst>
Fri, 20 Jul 2007 04:05:34 +0000 (04:05 +0000)
- On postgres query time drops from ~600ms to ~35ms in some
  instances, in other instances performance is around the same
  as old the implementation.

Author: Matt Clarkson <mattc@catalyst.net.nz>

lib/accesslib.php

index 15e1aef33d1ff5660486f4b6de46709ae83a9e5d..f53baec3629763dda4ce5fbe68e2a564b4e0cc5a 100755 (executable)
@@ -886,17 +886,16 @@ function load_user_capability($capability='', $context=NULL, $userid=NULL, $chec
               SELECT rc.capability, c1.id as id1, c2.id as id2, (c1.contextlevel * 100 + c2.contextlevel) AS aggrlevel,                    
                      SUM(rc.permission) AS sum
                      FROM
-                     {$CFG->prefix}role_assignments ra LEFT JOIN
-                     {$CFG->prefix}role_capabilities rc on ra.roleid = rc.roleid LEFT JOIN
-                     {$CFG->prefix}context c1 on ra.contextid = c1.id LEFT JOIN
-                     {$CFG->prefix}context c2 on rc.contextid = c2.id LEFT JOIN
-                     {$CFG->prefix}context_rel cr on cr.c1 = c2.id
+                     {$CFG->prefix}role_assignments ra INNER JOIN
+                     {$CFG->prefix}role_capabilities rc on ra.roleid = rc.roleid INNER JOIN
+                     {$CFG->prefix}context c1 on ra.contextid = c1.id INNER JOIN
+                     {$CFG->prefix}context c2 on rc.contextid = c2.id INNER JOIN
+                     {$CFG->prefix}context_rel cr on cr.c1 = c2.id AND cr.c2 = c1.id
                      WHERE
                      ra.userid=$userid AND
                      $searchcontexts1
                      rc.contextid != $siteinstance->id
                      $capsearch
-                     AND cr.c2 = c1.id
               GROUP BY
                      rc.capability, c1.id, c2.id, c1.contextlevel * 100 + c2.contextlevel
                      HAVING