From bf61d3f2b733546848c48286eb76f453422a46fc Mon Sep 17 00:00:00 2001 From: Mikhail Golenkov Date: Mon, 7 Oct 2019 16:28:16 +1100 Subject: [PATCH] MDL-66864 upgrade: Delete non-mutual contacts in chunks. --- lib/db/upgrade.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index a903d3dc813..55445315cb6 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2028,16 +2028,18 @@ function xmldb_main_upgrade($oldversion) { if ($oldversion < 2018092800.02) { // Delete any contacts that are not mutual (meaning they both haven't added each other). - $sql = "SELECT c1.id - FROM {message_contacts} c1 - LEFT JOIN {message_contacts} c2 - ON c1.userid = c2.contactid - AND c1.contactid = c2.userid - WHERE c2.id IS NULL"; - if ($contacts = $DB->get_records_sql($sql)) { - list($insql, $inparams) = $DB->get_in_or_equal(array_keys($contacts)); - $DB->delete_records_select('message_contacts', "id $insql", $inparams); - } + do { + $sql = "SELECT c1.id + FROM {message_contacts} c1 + LEFT JOIN {message_contacts} c2 + ON c1.userid = c2.contactid + AND c1.contactid = c2.userid + WHERE c2.id IS NULL"; + if ($contacts = $DB->get_records_sql($sql, null, 0, 1000)) { + list($insql, $inparams) = $DB->get_in_or_equal(array_keys($contacts)); + $DB->delete_records_select('message_contacts', "id $insql", $inparams); + } + } while ($contacts); upgrade_main_savepoint(true, 2018092800.02); }