]> git.mjollnir.org Git - moodle.git/commitdiff
Adding support for index renaming. Note that MySQL doesn't support this
authorstronk7 <stronk7>
Sat, 30 Sep 2006 18:23:00 +0000 (18:23 +0000)
committerstronk7 <stronk7>
Sat, 30 Sep 2006 18:23:00 +0000 (18:23 +0000)
but this shouldn't be important at all, mainly because, under xmldb,
accesses to index-names are always done with find_index_name() and
never explicity.
Anyway, this function could be useful in the future to normalize index
names in some Health center or another similar place.

admin/xmldb/actions/test/test.class.php
lib/xmldb/classes/XMLDBTable.class.php
lib/xmldb/classes/generators/XMLDBGenerator.class.php
lib/xmldb/classes/generators/mssql/mssql.class.php
lib/xmldb/classes/generators/mysql/mysql.class.php

index 9de98e97501a78946a729bef08a5ffa80c194036..ee16bf6ed0a2323e41e922c2ca5e37abedf6448a 100644 (file)
@@ -645,7 +645,7 @@ class test extends XMLDBAction {
             $tests['delete enumlist from one field'] = $test;
         }
 
-    /// 36th test. Creating the default for one field
+    /// 36th test. Creating the enum for one field
         if ($test->status) {
         /// Get SQL code and execute it
             $test = new stdClass;
@@ -660,6 +660,23 @@ class test extends XMLDBAction {
             $tests['add enumlist to one field'] = $test;
         }
 
+    /// 37th test. Renaming one index
+        if ($test->status) {
+        /// Get SQL code and execute it
+            $test = new stdClass;
+            $index = new XMLDBIndex('newnamefortheindex');
+            $index->setAttributes(XMLDB_INDEX_UNIQUE, array('name', 'course'));
+
+            $test->sql = $table->getRenameIndexSQL($CFG->dbtype, $CFG->prefix, $index, true);
+            $db->debug = true;
+            $test->status = rename_index($table, $index, 'newnamefortheindex', false, false);
+            $db->debug = false;
+            if (!$test->status) {
+                $test->error = $db->ErrorMsg();
+            }
+            $tests['rename index'] = $test;
+        }
+
 
 
 
index 11c9c1e0e241a0620dd3d644293db8d307209f25..917f112b76e66d0a3fddef1e3daaee98b1f7e614 100644 (file)
@@ -998,6 +998,24 @@ class XMLDBTable extends XMLDBObject {
         }
         return $results;
     }
+
+    /**
+     * This function will return the SQL code needed to rename one index from the table for the specified DB and
+     * prefix. Just one simple wrapper over generators.
+     */
+    function getRenameIndexSQL ($dbtype, $prefix, $xmldb_index, $statement_end=true) {
+
+        $results = array();
+
+        $classname = 'XMLDB' . $dbtype;
+        $generator = new $classname();
+        $generator->setPrefix($prefix);
+        $results = $generator->getRenameIndexSQL($this, $xmldb_index);
+        if ($statement_end) {
+            $results = $generator->getEndedStatements($results);
+        }
+        return $results;
+    }
 }
 
 ?>
index feae0b6ba07a897c4032df984ed096a6aef6d5ff..a2a148932b7da6bd2d13719afb82796e133519eb 100644 (file)
@@ -112,6 +112,9 @@ class XMLDBgenerator {
     var $drop_index_sql = 'DROP INDEX INDEXNAME'; //SQL sentence to drop one index
                                   //TABLENAME, INDEXNAME are dinamically replaced
 
+    var $rename_index_sql = 'ALTER INDEX OLDINDEXNAME RENAME TO NEWINDEXNAME'; //SQL sentence to rename one index
+                                  //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
+
     var $prefix;         // Prefix to be used for all the DB objects
 
     var $reserved_words; // List of reserved words (in order to quote them properly)
@@ -763,6 +766,29 @@ class XMLDBgenerator {
         return $results;
     }
 
+    /**
+     * Given one XMLDBTable and one XMLDBIndex, return the SQL statements needded to rename the index in the table
+     */
+
+    function getRenameIndexSQL($xmldb_table, $xmldb_index) {
+
+        $results = array();
+
+    /// Get the real index name
+        $dbindexname = find_index_name($xmldb_table, $xmldb_index);
+
+    /// Replace TABLENAME and INDEXNAME as needed
+        $renamesql = str_replace('TABLENAME', $this->getTableName($xmldb_table), $this->rename_index_sql);
+        $renamesql = str_replace('OLDINDEXNAME', $dbindexname, $renamesql);
+        $renamesql = str_replace('NEWINDEXNAME', $xmldb_index->getName(), $renamesql);
+
+    /// Some DB doesn't support index renaming (MySQL) so this can be empty
+        if ($renamesql) {
+            $results[] = $renamesql;
+        }
+
+        return $results;
+    }
 
     /**
      * Given three strings (table name, list of fields (comma separated) and suffix), create the proper object name
index 761556cdb726d0b08a6a26b0db0eaa1b056a37da..75083b6a00e5841fb170c246463e531dff669490 100644 (file)
@@ -56,6 +56,9 @@ class XMLDBmssql extends XMLDBgenerator {
     var $drop_index_sql = 'DROP INDEX TABLENAME.INDEXNAME'; //SQL sentence to drop one index
                                                                //TABLENAME, INDEXNAME are dinamically replaced
 
+    var $rename_index_sql = "sp_rename 'OLDINDEXNAME', 'NEWINDEXNAME', 'INDEX'"; //SQL sentence to rename one index
+                                      //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
+
     /**
      * Creates one new XMLDBmssql
      */
index 99c7b1cc2cc28e82d44990b18447d63e0915986f..d2ecb3e37105500986652d49717e831a6ec5aa05 100644 (file)
@@ -65,6 +65,9 @@ class XMLDBmysql extends XMLDBGenerator {
     var $drop_index_sql = 'ALTER TABLE TABLENAME DROP INDEX INDEXNAME'; //SQL sentence to drop one index
                                                                //TABLENAME, INDEXNAME are dinamically replaced
 
+    var $rename_index_sql = null; //SQL sentence to rename one index (MySQL doesn't support this!)
+                                      //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
+
     /**
      * Creates one new XMLDBmysql
      */