]> git.mjollnir.org Git - moodle.git/commitdiff
Implemented rename_key()
authorstronk7 <stronk7>
Sat, 30 Sep 2006 19:43:16 +0000 (19:43 +0000)
committerstronk7 <stronk7>
Sat, 30 Sep 2006 19:43:16 +0000 (19:43 +0000)
Note that this is one EXPERIMENTAL function and shouldn't be used
by you in production code EVER!

lib/xmldb/classes/generators/XMLDBGenerator.class.php
lib/xmldb/classes/generators/mssql/mssql.class.php
lib/xmldb/classes/generators/mysql/mysql.class.php
lib/xmldb/classes/generators/postgres7/postgres7.class.php

index a2a148932b7da6bd2d13719afb82796e133519eb..69ca4fdec7e5684c3acb1cb3fe219c67f0e00b1b 100644 (file)
@@ -115,6 +115,9 @@ class XMLDBgenerator {
     var $rename_index_sql = 'ALTER INDEX OLDINDEXNAME RENAME TO NEWINDEXNAME'; //SQL sentence to rename one index
                                   //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
 
+    var $rename_key_sql = 'ALTER TABLE TABLENAME CONSTRAINT OLDKEYNAME RENAME TO NEWKEYNAME'; //SQL sentence to rename one key
+                                  //TABLENAME, OLDKEYNAME, NEWKEYNAME 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)
@@ -738,6 +741,43 @@ class XMLDBgenerator {
         return $results;
     }
 
+    /**
+     * Given one XMLDBTable and one XMLDBKey, return the SQL statements needded to rename the key in the table
+     * Experimental! Shouldn't be used at all!
+     */
+
+    function getRenameKeySQL($xmldb_table, $xmldb_key) {
+
+        $results = array();
+
+    /// Get the real key name
+        $dbkeyname = find_key_name($xmldb_table, $xmldb_key);
+
+    /// Check we are really generating this type of keys
+        if (($xmldb_key->getType() == XMLDB_KEY_PRIMARY && !$this->primary_keys) ||
+            ($xmldb_key->getType() == XMLDB_KEY_UNIQUE && !$this->unique_keys) ||
+            ($xmldb_key->getType() == XMLDB_KEY_FOREIGN && !$this->foreign_keys) ||
+            ($xmldb_key->getType() == XMLDB_KEY_FOREIGN_UNIQUE && !$this->unique_keys && !$this->foreign_keys)) {
+        /// We aren't generating this type of keys, delegate to child indexes
+            $xmldb_index = new XMLDBIndex($xmldb_key->getName());
+            $xmldb_index->setFields($xmldb_key->getFields());
+            return $this->getRenameIndexSQL($xmldb_table, $xmldb_index);
+        }
+
+    /// Arrived here so we are working with keys, lets rename them
+    /// Replace TABLENAME and KEYNAME as needed
+        $renamesql = str_replace('TABLENAME', $this->getTableName($xmldb_table), $this->rename_key_sql);
+        $renamesql = str_replace('OLDKEYNAME', $dbkeyname, $renamesql);
+        $renamesql = str_replace('NEWKEYNAME', $xmldb_key->getName(), $renamesql);
+
+    /// Some DB doesn't support key renaming so this can be empty
+        if ($renamesql) {
+            $results[] = $renamesql;
+        }
+
+        return $results;
+    }
+
     /**
      * Given one XMLDBTable and one XMLDBIndex, return the SQL statements needded to add the index to the table
      */
@@ -768,6 +808,7 @@ class XMLDBgenerator {
 
     /**
      * Given one XMLDBTable and one XMLDBIndex, return the SQL statements needded to rename the index in the table
+     * Experimental! Shouldn't be used at all!
      */
 
     function getRenameIndexSQL($xmldb_table, $xmldb_index) {
index 75083b6a00e5841fb170c246463e531dff669490..b427f4f588ebefffbbe8ed1eaadca5374e5b0f4a 100644 (file)
@@ -56,9 +56,12 @@ 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
+    var $rename_index_sql = "sp_rename 'TABLENAME.OLDINDEXNAME', 'NEWINDEXNAME', 'INDEX'"; //SQL sentence to rename one index
                                       //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
 
+    var $rename_key_sql = null; //SQL sentence to rename one key
+                                          //TABLENAME, OLDKEYNAME, NEWKEYNAME are dinamically replaced
+
     /**
      * Creates one new XMLDBmssql
      */
index d2ecb3e37105500986652d49717e831a6ec5aa05..7d3547f4d64fafcb7dcbde840a248f5af8bf5211 100644 (file)
@@ -68,6 +68,9 @@ class XMLDBmysql extends XMLDBGenerator {
     var $rename_index_sql = null; //SQL sentence to rename one index (MySQL doesn't support this!)
                                       //TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dinamically replaced
 
+    var $rename_key_sql = null; //SQL sentence to rename one key (MySQL doesn't support this!)
+                                      //TABLENAME, OLDKEYNAME, NEWKEYNAME are dinamically replaced
+
     /**
      * Creates one new XMLDBmysql
      */
index 7cd11c3a3dee0e8618799534920ba1bd56dad2fb..0ec062cbe291c275aa49d4338878a6ceabada3a1 100644 (file)
@@ -43,6 +43,9 @@ class XMLDBpostgres7 extends XMLDBgenerator {
 
     var $enum_inline_code = false; //Does the generator need to add inline code in the column definition
 
+    var $rename_key_sql = null; //SQL sentence to rename one key (PostgreSQL doesn't support this!)
+                                          //TABLENAME, OLDKEYNAME, NEWKEYNAME are dinamically replaced
+
     /**
      * Creates one new XMLDBpostgres7
      */