From 0eab8a42216882fd830f2a5c0bbdedee91ab64f1 Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Mon, 6 May 2019 16:46:06 +0800 Subject: [PATCH] MDL-65313 core: Fix orphaned favourites cleanup --- lib/db/upgrade.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index b3e24ea7562..814486cb6c2 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -3303,16 +3303,22 @@ function xmldb_main_upgrade($oldversion) { if ($oldversion < 2019050300.01) { // Delete all stale favourite records which were left behind when a course was deleted. - $select = 'id IN ( - SELECT fav.id as id - FROM {favourite} fav - LEFT JOIN {context} ctx ON (ctx.id = fav.contextid) - WHERE fav.component = :component - AND fav.itemtype = :itemtype - AND ctx.id IS NULL - )'; $params = ['component' => 'core_message', 'itemtype' => 'message_conversations']; - $DB->delete_records_select('favourite', $select, $params); + $sql = "SELECT fav.id as id + FROM {favourite} fav + LEFT JOIN {context} ctx ON (ctx.id = fav.contextid) + WHERE fav.component = :component + AND fav.itemtype = :itemtype + AND ctx.id IS NULL"; + + if ($records = $DB->get_fieldset_sql($sql, $params)) { + // Just for safety, delete by chunks. + $chunks = array_chunk($records, 1000); + foreach ($chunks as $chunk) { + list($insql, $inparams) = $DB->get_in_or_equal($chunk); + $DB->delete_records_select('favourite', "id $insql", $inparams); + } + } upgrade_main_savepoint(true, 2019050300.01); } -- 2.43.0