/** * 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, $newname) { $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, $newname); } /// 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', $newname, $renamesql); /// Some DB doesn't support key renaming so this can be empty if ($renamesql) { $results[] = $renamesql; } return $results; }
/** * Given an XMLDBKey, check if it exists in the database (true/false). * NOTE: I wanted to call this key_exists() to keep the pattern of index_exists() et al, * but key_exists() is a PHP core alias for array_key_exists() * @param XMLDBTable $table * @param XMLDBKey $key */ function db_key_exists(XMLDBTable $table, XMLDBKey $key) { global $CFG, $db; // If find_key_name returns boolean false, the key doesn't exist. Otherwise, it does exist. return false !== find_key_name($table, $key); }