MDL-45642 questions: add required index to question_attempts.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Fri, 8 Aug 2014 12:56:23 +0000 (13:56 +0100)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Fri, 8 Aug 2014 12:56:23 +0000 (13:56 +0100)
It is important to be able to tell which behaviours are in use, and
without this index, it requires a complete scan of this table, which can
be very big, to verify that a behaviour is unused.

lib/db/install.xml
lib/db/upgrade.php
version.php

index ac9693e..21490f8 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20140627" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20140808" COMMENT="XMLDB file for core Moodle tables"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
 >
       </KEYS>
       <INDEXES>
         <INDEX NAME="questionusageid-slot" UNIQUE="true" FIELDS="questionusageid, slot"/>
+        <INDEX NAME="behaviour" UNIQUE="false" FIELDS="behaviour" COMMENT="Required because we need to be able to determine efficiently which behaviours are in use."/>
       </INDEXES>
     </TABLE>
     <TABLE NAME="question_attempt_steps" COMMENT="Stores one step in in a question attempt. As well as the data here, the step will have some data in the question_attempt_step_data table.">
index 5d88ee4..4a9c741 100644 (file)
@@ -3719,5 +3719,20 @@ function xmldb_main_upgrade($oldversion) {
         upgrade_main_savepoint(true, 2014072400.01);
     }
 
+    if ($oldversion < 2014080801.00) {
+
+        // Define index behaviour (not unique) to be added to question_attempts.
+        $table = new xmldb_table('question_attempts');
+        $index = new xmldb_index('behaviour', XMLDB_INDEX_NOTUNIQUE, array('behaviour'));
+
+        // Conditionally launch add index behaviour.
+        if (!$dbman->index_exists($table, $index)) {
+            $dbman->add_index($table, $index);
+        }
+
+        // Main savepoint reached.
+        upgrade_main_savepoint(true, 2014080801.00);
+    }
+
     return true;
 }
index 81f07c9..8c92a7a 100644 (file)
@@ -29,7 +29,7 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$version  = 2014080700.00;              // YYYYMMDD      = weekly release date of this DEV branch.
+$version  = 2014080801.00;              // YYYYMMDD      = weekly release date of this DEV branch.
                                         //         RR    = release increments - 00 in DEV branches.
                                         //           .XX = incremental changes.