MDL-65809 upgrade: remove upgrade_block_positions
authorSara Arjona <sara@moodle.com>
Thu, 5 Dec 2019 11:11:15 +0000 (12:11 +0100)
committerSara Arjona <sara@moodle.com>
Fri, 20 Dec 2019 11:20:43 +0000 (12:20 +0100)
This function was used only by deleted upgrade steps
so it's safe to proceed with straight deletion, considering
it internal. Deletion has been documented in corresponding
upgrade.txt files.

admin/upgrade.txt
lib/db/upgrade.php
lib/db/upgradelib.php
lib/tests/upgradelib_test.php

index 6b11cae..d3adb18 100644 (file)
@@ -7,6 +7,7 @@ This files describes API changes in /admin/*.
     - upgrade_theme_is_from_family()
     - upgrade_find_theme_location()
     - linkcoursesectionsupgradescriptwasrun setting
+    - upgrade_block_positions()
 
 === 3.8 ===
 
index 30d11de..4f4aeec 100644 (file)
@@ -190,17 +190,6 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2017020200.02);
     }
 
-    if ($oldversion < 2017020901.00) {
-
-        // Delete "orphaned" block positions. Note, the query does not use indexes (because there are none),
-        // if it runs too long during upgrade you can comment this line - it will leave orphaned records
-        // in the database but they won't bother you.
-        upgrade_block_positions();
-
-        // Main savepoint reached.
-        upgrade_main_savepoint(true, 2017020901.00);
-    }
-
     if ($oldversion < 2017021300.00) {
         unset_config('loginpasswordautocomplete');
         upgrade_main_savepoint(true, 2017021300.00);
index 90e6ce0..d2ebc51 100644 (file)
@@ -488,21 +488,6 @@ function upgrade_standardise_score($rawgrade, $sourcemin, $sourcemax, $targetmin
     return $standardisedvalue;
 }
 
-/**
- * Delete orphaned records in block_positions
- */
-function upgrade_block_positions() {
-    global $DB;
-    $id = 'id';
-    if ($DB->get_dbfamily() !== 'mysql') {
-        // Field block_positions.subpage has type 'char', it can not be compared to int in db engines except for mysql.
-        $id = $DB->sql_concat('?', 'id');
-    }
-    $sql = "DELETE FROM {block_positions}
-    WHERE pagetype IN ('my-index', 'user-profile') AND subpage NOT IN (SELECT $id FROM {my_pages})";
-    $DB->execute($sql, ['']);
-}
-
 /**
  * Provides a way to check and update a serialized string that uses the deprecated object class.
  *
index 99b682b..b68a992 100644 (file)
@@ -650,49 +650,6 @@ class core_upgradelib_testcase extends advanced_testcase {
         }
     }
 
-    /**
-     * Create two pages with blocks, delete one page and make sure upgrade script deletes orphaned blocks
-     */
-    public function test_delete_block_positions() {
-        global $DB, $CFG;
-        require_once($CFG->dirroot . '/my/lib.php');
-        $this->resetAfterTest();
-
-        // Make sure each block on system dashboard page has a position.
-        $systempage = $DB->get_record('my_pages', array('userid' => null, 'private' => MY_PAGE_PRIVATE));
-        $systemcontext = context_system::instance();
-        $blockinstances = $DB->get_records('block_instances', array('parentcontextid' => $systemcontext->id,
-            'pagetypepattern' => 'my-index', 'subpagepattern' => $systempage->id));
-        $this->assertNotEmpty($blockinstances);
-        foreach ($blockinstances as $bi) {
-            $DB->insert_record('block_positions', ['subpage' => $systempage->id, 'pagetype' => 'my-index', 'contextid' => $systemcontext->id,
-                'blockinstanceid' => $bi->id, 'visible' => 1, 'weight' => $bi->defaultweight]);
-        }
-
-        // Create two users and make two copies of the system dashboard.
-        $user1 = $this->getDataGenerator()->create_user();
-        $user2 = $this->getDataGenerator()->create_user();
-        $page1 = my_copy_page($user1->id, MY_PAGE_PRIVATE, 'my-index');
-        $page2 = my_copy_page($user2->id, MY_PAGE_PRIVATE, 'my-index');
-
-        $context1 = context_user::instance($user1->id);
-        $context2 = context_user::instance($user2->id);
-
-        // Delete second page without deleting block positions.
-        $DB->delete_records('my_pages', ['id' => $page2->id]);
-
-        // Blocks are still here.
-        $this->assertEquals(count($blockinstances), $DB->count_records('block_positions', ['subpage' => $page1->id, 'pagetype' => 'my-index', 'contextid' => $context1->id]));
-        $this->assertEquals(count($blockinstances), $DB->count_records('block_positions', ['subpage' => $page2->id, 'pagetype' => 'my-index', 'contextid' => $context2->id]));
-
-        // Run upgrade script that should delete orphaned block_positions.
-        upgrade_block_positions();
-
-        // First user still has all his block_positions, second user does not.
-        $this->assertEquals(count($blockinstances), $DB->count_records('block_positions', ['subpage' => $page1->id, 'pagetype' => 'my-index', 'contextid' => $context1->id]));
-        $this->assertEquals(0, $DB->count_records('block_positions', ['subpage' => $page2->id, 'pagetype' => 'my-index']));
-    }
-
     /**
      * Test the conversion of auth plugin settings names.
      */