mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-01 20:19:42 +08:00
w
This commit is contained in:
@ -21,7 +21,7 @@ class QueryBuilder extends \yii\base\Component
|
||||
/**
|
||||
* @var array the abstract column types mapped to physical column types.
|
||||
*/
|
||||
public $columnTypes = array(
|
||||
public $typeMap = array(
|
||||
'pk' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
|
||||
'string' => 'varchar(255)',
|
||||
'text' => 'text',
|
||||
@ -379,7 +379,7 @@ class QueryBuilder extends \yii\base\Component
|
||||
|
||||
/**
|
||||
* Converts an abstract column type into a physical column type.
|
||||
* The conversion is done using the type map specified in {@link columnTypes}.
|
||||
* The conversion is done using the type map specified in {@link typeMap}.
|
||||
* These abstract column types are supported (using MySQL as example to explain the corresponding
|
||||
* physical types):
|
||||
* <ul>
|
||||
@ -405,12 +405,12 @@ class QueryBuilder extends \yii\base\Component
|
||||
*/
|
||||
public function getColumnType($type)
|
||||
{
|
||||
if (isset($this->columnTypes[$type])) {
|
||||
return $this->columnTypes[$type];
|
||||
if (isset($this->typeMap[$type])) {
|
||||
return $this->typeMap[$type];
|
||||
}
|
||||
elseif (($pos = strpos($type, ' ')) !== false) {
|
||||
$t = substr($type, 0, $pos);
|
||||
return (isset($this->columnTypes[$t]) ? $this->columnTypes[$t] : $t) . substr($type, $pos);
|
||||
return (isset($this->typeMap[$t]) ? $this->typeMap[$t] : $t) . substr($type, $pos);
|
||||
}
|
||||
else {
|
||||
return $type;
|
||||
|
||||
@ -49,33 +49,27 @@ class QueryBuilder extends \yii\db\dao\QueryBuilder
|
||||
*/
|
||||
public function renameColumn($table, $name, $newName)
|
||||
{
|
||||
$db = $this->getDbConnection();
|
||||
$row = $db->createCommand('SHOW CREATE TABLE ' . $db->quoteTableName($table))->queryRow();
|
||||
$quotedTable = $this->schema->quoteTableName($table);
|
||||
$row = $this->connection->createCommand('SHOW CREATE TABLE ' . $quotedTable)->queryRow();
|
||||
if ($row === false)
|
||||
throw new CDbException(Yii::t('yii', 'Unable to find "{column}" in table "{table}".', array('{column}' => $name, '{table}' => $table)));
|
||||
if (isset($row['Create Table']))
|
||||
if (isset($row['Create Table'])) {
|
||||
$sql = $row['Create Table'];
|
||||
else
|
||||
{
|
||||
}
|
||||
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 === $name)
|
||||
{
|
||||
return "ALTER TABLE " . $db->quoteTableName($table)
|
||||
. " CHANGE " . $db->quoteColumnName($name)
|
||||
. ' ' . $db->quoteColumnName($newName) . ' ' . $matches[2][$i];
|
||||
if (preg_match_all('/^\s*`(.*?)`\s+(.*?),?$/m', $sql, $matches)) {
|
||||
foreach ($matches[1] as $i => $c) {
|
||||
if ($c === $name) {
|
||||
return "ALTER TABLE $quotedTable CHANGE " . $this->schema->quoteColumnName($name)
|
||||
. ' ' . $this->schema->quoteColumnName($newName) . ' ' . $matches[2][$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// try to give back a SQL anyway
|
||||
return "ALTER TABLE " . $db->quoteTableName($table)
|
||||
. " CHANGE " . $db->quoteColumnName($name) . ' ' . $newName;
|
||||
return "ALTER TABLE $quotedTable CHANGE " . $this->schema->quoteColumnName($name) . ' ' . $newName;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,7 +81,7 @@ class QueryBuilder extends \yii\db\dao\QueryBuilder
|
||||
*/
|
||||
public function dropForeignKey($name, $table)
|
||||
{
|
||||
return 'ALTER TABLE ' . $this->quoteTableName($table)
|
||||
. ' DROP FOREIGN KEY ' . $this->quoteColumnName($name);
|
||||
return 'ALTER TABLE ' . $this->schema->quoteTableName($table)
|
||||
. ' DROP FOREIGN KEY ' . $this->schema->quoteColumnName($name);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user