MDL-62698 quiz_overview: new index should not be unique
authorTim Hunt <T.J.Hunt@open.ac.uk>
Mon, 18 Jun 2018 12:34:20 +0000 (13:34 +0100)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Fri, 22 Jun 2018 12:32:04 +0000 (13:32 +0100)
mod/quiz/report/overview/db/install.xml
mod/quiz/report/overview/db/upgrade.php
mod/quiz/report/overview/version.php

index 6eb80f6..6f2391b 100644 (file)
@@ -16,7 +16,7 @@
       </FIELDS>
       <KEYS>
         <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-        <KEY NAME="questionusageid-slot" TYPE="foreign-unique" FIELDS="questionusageid, slot" REFTABLE="question_attempts" REFFIELDS="questionusageid, slot"/>
+        <KEY NAME="questionusageid-slot" TYPE="foreign" FIELDS="questionusageid, slot" REFTABLE="question_attempts" REFFIELDS="questionusageid, slot"/>
       </KEYS>
     </TABLE>
   </TABLES>
index 81efd89..0cc8919 100644 (file)
@@ -42,21 +42,42 @@ function xmldb_quiz_overview_upgrade($oldversion) {
     // Automatically generated Moodle v3.4.0 release upgrade line.
     // Put any upgrade step following this.
 
-    if ($oldversion < 2018021800) {
+    // Automatically generated Moodle v3.5.0 release upgrade line.
+    // Put any upgrade step following this.
+
+    // Upgrade 2018021800 (now removed) incorrectly added this key
+    // with a unique constraint, which breaks things because those
+    // columns are not, in fact, unique. So drop (if it exists) then recreate.
+    if ($oldversion < 2018061800) {
+
+        // Define key questionusageid-slot (foreign) to be dropped form quiz_overview_regrades.
+        $table = new xmldb_table('quiz_overview_regrades');
+
+        // There is no key_exists, so test the equivalent index.
+        $oldindex = new xmldb_index('questionusageid-slot', XMLDB_KEY_UNIQUE, array('questionusageid', 'slot'));
+
+        // Launch drop key questionusageid-slot.
+        if ($dbman->index_exists($table, $oldindex)) {
+            $key = new xmldb_key('questionusageid-slot', XMLDB_KEY_FOREIGN, array('questionusageid', 'slot'), 'question_attempts', array('questionusageid', 'slot'));
+            $dbman->drop_key($table, $key);
+        }
 
-        // Define key questionusageid-slot (foreign-unique) to be added to quiz_overview_regrades.
+        // Overview savepoint reached.
+        upgrade_plugin_savepoint(true, 2018061800, 'quiz', 'overview');
+    }
+
+    if ($oldversion < 2018061801) {
+
+        // Define key questionusageid-slot (foreign) to be added to quiz_overview_regrades.
         $table = new xmldb_table('quiz_overview_regrades');
-        $key = new xmldb_key('questionusageid-slot', XMLDB_KEY_FOREIGN_UNIQUE, array('questionusageid', 'slot'), 'question_attempts', array('questionusageid', 'slot'));
+        $key = new xmldb_key('questionusageid-slot', XMLDB_KEY_FOREIGN, array('questionusageid', 'slot'), 'question_attempts', array('questionusageid', 'slot'));
 
         // Launch add key questionusageid-slot.
         $dbman->add_key($table, $key);
 
         // Overview savepoint reached.
-        upgrade_plugin_savepoint(true, 2018021800, 'quiz', 'overview');
+        upgrade_plugin_savepoint(true, 2018061801, 'quiz', 'overview');
     }
 
-    // Automatically generated Moodle v3.5.0 release upgrade line.
-    // Put any upgrade step following this.
-
     return true;
 }
index b3a68de..76d0534 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version  = 2018051400;
+$plugin->version  = 2018061801;
 $plugin->requires = 2018050800;
 $plugin->component = 'quiz_overview';