From 7f1c64211228dc9b409e238fb784b604f44bc4e2 Mon Sep 17 00:00:00 2001 From: Adam Olley Date: Fri, 27 Nov 2015 13:11:02 +1030 Subject: [PATCH] MDL-52334 enrol_database: Add missing filter to user_enrolment lookup Without the user filter, the left join to the user enrolment table results in a much larger set of data being returned than before MDL-28420. Which makes login time for users in many busy courses much worse than before (3x worse on average, observed upto 40x). --- enrol/database/lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enrol/database/lib.php b/enrol/database/lib.php index c22c65e9313..d25e14a91b6 100644 --- a/enrol/database/lib.php +++ b/enrol/database/lib.php @@ -264,9 +264,9 @@ class enrol_database_plugin extends enrol_plugin { FROM {enrol} e JOIN {course} c ON c.id = e.courseid JOIN {role_assignments} ra ON ra.itemid = e.id - LEFT JOIN {user_enrolments} ue ON ue.enrolid = e.id + LEFT JOIN {user_enrolments} ue ON ue.enrolid = e.id AND ue.userid = ra.userid WHERE ra.userid = :userid AND e.enrol = 'database'"; - $rs = $DB->get_recordset_sql($sql, array('userid'=>$user->id)); + $rs = $DB->get_recordset_sql($sql, array('userid' => $user->id)); foreach ($rs as $instance) { if (!$instance->cvisible and $ignorehidden) { continue;