From bc6687bab354a876fc872567e767a971e5d5bc33 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 18 Jun 2018 13:34:20 +0100 Subject: [PATCH] MDL-62698 quiz_overview: new index should not be unique --- mod/quiz/report/overview/db/install.xml | 2 +- mod/quiz/report/overview/db/upgrade.php | 35 ++++++++++++++++++++----- mod/quiz/report/overview/version.php | 2 +- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/mod/quiz/report/overview/db/install.xml b/mod/quiz/report/overview/db/install.xml index 6eb80f69499..6f2391b1311 100644 --- a/mod/quiz/report/overview/db/install.xml +++ b/mod/quiz/report/overview/db/install.xml @@ -16,7 +16,7 @@ - + diff --git a/mod/quiz/report/overview/db/upgrade.php b/mod/quiz/report/overview/db/upgrade.php index 81efd89b062..0cc8919fd01 100644 --- a/mod/quiz/report/overview/db/upgrade.php +++ b/mod/quiz/report/overview/db/upgrade.php @@ -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; } diff --git a/mod/quiz/report/overview/version.php b/mod/quiz/report/overview/version.php index b3a68de5fc6..76d053439d5 100644 --- a/mod/quiz/report/overview/version.php +++ b/mod/quiz/report/overview/version.php @@ -24,6 +24,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018051400; +$plugin->version = 2018061801; $plugin->requires = 2018050800; $plugin->component = 'quiz_overview'; -- 2.43.0