mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +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