From e77fd021e6258a86aea193d676d2b268b2cb2531 Mon Sep 17 00:00:00 2001 From: stronk7 Date: Sat, 30 Sep 2006 19:43:16 +0000 Subject: [PATCH] Implemented rename_key() Note that this is one EXPERIMENTAL function and shouldn't be used by you in production code EVER! --- .../generators/XMLDBGenerator.class.php | 41 +++++++++++++++++++ .../classes/generators/mssql/mssql.class.php | 5 ++- .../classes/generators/mysql/mysql.class.php | 3 ++ .../generators/postgres7/postgres7.class.php | 3 ++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/xmldb/classes/generators/XMLDBGenerator.class.php b/lib/xmldb/classes/generators/XMLDBGenerator.class.php index a2a148932b..69ca4fdec7 100644 --- a/lib/xmldb/classes/generators/XMLDBGenerator.class.php +++ b/lib/xmldb/classes/generators/XMLDBGenerator.class.php @@ -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) { diff --git a/lib/xmldb/classes/generators/mssql/mssql.class.php b/lib/xmldb/classes/generators/mssql/mssql.class.php index 75083b6a00..b427f4f588 100644 --- a/lib/xmldb/classes/generators/mssql/mssql.class.php +++ b/lib/xmldb/classes/generators/mssql/mssql.class.php @@ -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 */ diff --git a/lib/xmldb/classes/generators/mysql/mysql.class.php b/lib/xmldb/classes/generators/mysql/mysql.class.php index d2ecb3e371..7d3547f4d6 100644 --- a/lib/xmldb/classes/generators/mysql/mysql.class.php +++ b/lib/xmldb/classes/generators/mysql/mysql.class.php @@ -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 */ diff --git a/lib/xmldb/classes/generators/postgres7/postgres7.class.php b/lib/xmldb/classes/generators/postgres7/postgres7.class.php index 7cd11c3a3d..0ec062cbe2 100644 --- a/lib/xmldb/classes/generators/postgres7/postgres7.class.php +++ b/lib/xmldb/classes/generators/postgres7/postgres7.class.php @@ -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 */ -- 2.39.5