From 83c4b6d01e824c1011bf05dc3a2ee00eb88b7ea9 Mon Sep 17 00:00:00 2001 From: Michael Aherne Date: Tue, 4 Dec 2018 13:01:07 +0000 Subject: [PATCH] MDL-64216 privacy: Split query to use indexes. --- grade/classes/privacy/provider.php | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/grade/classes/privacy/provider.php b/grade/classes/privacy/provider.php index b5ea2e4de18..b740003f297 100644 --- a/grade/classes/privacy/provider.php +++ b/grade/classes/privacy/provider.php @@ -211,25 +211,32 @@ class provider implements JOIN {context} ctx ON ctx.instanceid = gi.courseid AND ctx.contextlevel = :courselevel - LEFT JOIN {grade_grades} gg + JOIN {grade_grades} gg ON gg.itemid = gi.id - AND (gg.userid = :userid1 OR gg.usermodified = :userid2) - LEFT JOIN {grade_grades_history} ggh + WHERE gg.userid = :userid1 OR gg.usermodified = :userid2"; + $params = [ + 'courselevel' => CONTEXT_COURSE, + 'userid1' => $userid, + 'userid2' => $userid + ]; + $contextlist->add_from_sql($sql, $params); + + $sql = " + SELECT DISTINCT ctx.id + FROM {grade_items} gi + JOIN {context} ctx + ON ctx.instanceid = gi.courseid + AND ctx.contextlevel = :courselevel + JOIN {grade_grades_history} ggh ON ggh.itemid = gi.id - AND ( - ggh.userid = :userid3 - OR ggh.loggeduser = :userid4 - OR ggh.usermodified = :userid5 - ) - WHERE gg.id IS NOT NULL - OR ggh.id IS NOT NULL"; + WHERE ggh.userid = :userid1 + OR ggh.loggeduser = :userid2 + OR ggh.usermodified = :userid3"; $params = [ 'courselevel' => CONTEXT_COURSE, 'userid1' => $userid, 'userid2' => $userid, - 'userid3' => $userid, - 'userid4' => $userid, - 'userid5' => $userid, + 'userid3' => $userid ]; $contextlist->add_from_sql($sql, $params);