public function renameColumn($table, $oldName, $newName)
{
$quotedTable = $this->db->quoteTableName($table);
$row = $this->db->createCommand('SHOW CREATE TABLE ' . $quotedTable)->queryOne();
if ($row === false) {
throw new Exception("Unable to find column '{$oldName}' in table '{$table}'.");
}
if (isset($row['Create Table'])) {
$sql = $row['Create Table'];
} else {
$row = array_values($row);
$sql = $row[1];
}
if (preg_match_all('/^\\s*`(.*?)`\\s+(.*?),?$/m', $sql, $matches)) {
foreach ($matches[1] as $i => $c) {
if ($c === $oldName) {
return "ALTER TABLE {$quotedTable} CHANGE " . $this->db->quoteColumnName($oldName) . ' ' . $this->db->quoteColumnName($newName) . ' ' . $matches[2][$i];
}
}
}
// try to give back a SQL anyway
return "ALTER TABLE {$quotedTable} CHANGE " . $this->db->quoteColumnName($oldName) . ' ' . $this->db->quoteColumnName($newName);
}