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