Implemented rename_key()

Note that this is one EXPERIMENTAL function and shouldn't be used
by you in production code EVER!
This commit is contained in:
stronk7 2006-09-30 19:43:16 +00:00
parent eefa69ce5c
commit e77fd021e6
4 changed files with 51 additions and 1 deletions

View 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) {

View 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
*/

View 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
*/

View 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
*/