mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	...
This commit is contained in:
		@ -29,6 +29,7 @@ abstract class Driver extends \yii\base\Object
 | 
				
			|||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * The followings are the supported abstract column data types.
 | 
						 * The followings are the supported abstract column data types.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 | 
						const TYPE_PK = 'pk';
 | 
				
			||||||
	const TYPE_STRING = 'string';
 | 
						const TYPE_STRING = 'string';
 | 
				
			||||||
	const TYPE_TEXT = 'text';
 | 
						const TYPE_TEXT = 'text';
 | 
				
			||||||
	const TYPE_SMALLINT = 'smallint';
 | 
						const TYPE_SMALLINT = 'smallint';
 | 
				
			||||||
 | 
				
			|||||||
@ -1,107 +0,0 @@
 | 
				
			|||||||
<?php
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * ColumnSchema class file.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @author Qiang Xue <qiang.xue@gmail.com>
 | 
					 | 
				
			||||||
 * @link http://www.yiiframework.com/
 | 
					 | 
				
			||||||
 * @copyright Copyright © 2008-2012 Yii Software LLC
 | 
					 | 
				
			||||||
 * @license http://www.yiiframework.com/license/
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace yii\db\dao\mysql;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * ColumnSchema class describes the meta data of a MySQL table column.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @author Qiang Xue <qiang.xue@gmail.com>
 | 
					 | 
				
			||||||
 * @since 2.0
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
class ColumnSchema extends \yii\db\dao\ColumnSchema
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Extracts the PHP type from DB type.
 | 
					 | 
				
			||||||
	 * @param string $dbType DB type
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	public function initTypes($dbType)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		static $typeMap = array(  // dbType => type
 | 
					 | 
				
			||||||
			'tinyint' => self::TYPE_SMALLINT,
 | 
					 | 
				
			||||||
			'bit' => self::TYPE_SMALLINT,
 | 
					 | 
				
			||||||
			'smallint' => self::TYPE_SMALLINT,
 | 
					 | 
				
			||||||
			'mediumint' => self::TYPE_INTEGER,
 | 
					 | 
				
			||||||
			'int' => self::TYPE_INTEGER,
 | 
					 | 
				
			||||||
			'integer' => self::TYPE_INTEGER,
 | 
					 | 
				
			||||||
			'bigint' => self::TYPE_BIGINT,
 | 
					 | 
				
			||||||
			'float' => self::TYPE_FLOAT,
 | 
					 | 
				
			||||||
			'double' => self::TYPE_FLOAT,
 | 
					 | 
				
			||||||
			'real' => self::TYPE_FLOAT,
 | 
					 | 
				
			||||||
			'decimal' => self::TYPE_DECIMAL,
 | 
					 | 
				
			||||||
			'numeric' => self::TYPE_DECIMAL,
 | 
					 | 
				
			||||||
            'tinytext' => self::TYPE_TEXT,
 | 
					 | 
				
			||||||
            'mediumtext' => self::TYPE_TEXT,
 | 
					 | 
				
			||||||
            'longtext' => self::TYPE_TEXT,
 | 
					 | 
				
			||||||
            'text' => self::TYPE_TEXT,
 | 
					 | 
				
			||||||
            'varchar' => self::TYPE_STRING,
 | 
					 | 
				
			||||||
            'string' => self::TYPE_STRING,
 | 
					 | 
				
			||||||
            'char' => self::TYPE_STRING,
 | 
					 | 
				
			||||||
			'datetime' => self::TYPE_DATETIME,
 | 
					 | 
				
			||||||
			'year' => self::TYPE_DATE,
 | 
					 | 
				
			||||||
			'date' => self::TYPE_DATE,
 | 
					 | 
				
			||||||
			'time' => self::TYPE_TIME,
 | 
					 | 
				
			||||||
			'timestamp' => self::TYPE_TIMESTAMP,
 | 
					 | 
				
			||||||
			'enum' => self::TYPE_STRING,
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		$this->dbType = $dbType;
 | 
					 | 
				
			||||||
		$this->type = self::TYPE_STRING;
 | 
					 | 
				
			||||||
		$this->unsigned = strpos($this->dbType, 'unsigned') !== false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (preg_match('/^(\w+)(?:\(([^\)]+)\))?/', $this->dbType, $matches)) {
 | 
					 | 
				
			||||||
			$type = $matches[1];
 | 
					 | 
				
			||||||
			if (isset($typeMap[$type])) {
 | 
					 | 
				
			||||||
				$this->type = $typeMap[$type];
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (!empty($matches[2])) {
 | 
					 | 
				
			||||||
				if ($type === 'enum') {
 | 
					 | 
				
			||||||
					$values = explode(',', $matches[2]);
 | 
					 | 
				
			||||||
					foreach ($values as $i => $value) {
 | 
					 | 
				
			||||||
						$values[$i] = trim($value, "'");
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					$this->enumValues = $values;
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					$values = explode(',', $matches[2]);
 | 
					 | 
				
			||||||
					$this->size = $this->precision = (int)$values[0];
 | 
					 | 
				
			||||||
					if (isset($values[1])) {
 | 
					 | 
				
			||||||
						$this->scale = (int)$values[1];
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					if ($this->size === 1 && ($type === 'tinyint' || $type === 'bit')) {
 | 
					 | 
				
			||||||
						$this->type = 'boolean';
 | 
					 | 
				
			||||||
					} elseif ($type === 'bit') {
 | 
					 | 
				
			||||||
						if ($this->size > 32) {
 | 
					 | 
				
			||||||
							$this->type = 'bigint';
 | 
					 | 
				
			||||||
						} elseif ($this->size === 32) {
 | 
					 | 
				
			||||||
							$this->type = 'integer';
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		$this->phpType = $this->extractPhpType();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Extracts the default value for the column.
 | 
					 | 
				
			||||||
	 * The value is typecast to correct PHP type.
 | 
					 | 
				
			||||||
	 * @param mixed $defaultValue the default value obtained from metadata
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	public function initDefaultValue($defaultValue)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if ($this->type === 'timestamp' && $defaultValue === 'CURRENT_TIMESTAMP') {
 | 
					 | 
				
			||||||
			$this->defaultValue = null;
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			$this->defaultValue = $this->typecast($defaultValue);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -22,7 +22,7 @@ use yii\db\dao\ColumnSchema;
 | 
				
			|||||||
class Driver extends \yii\db\dao\Driver
 | 
					class Driver extends \yii\db\dao\Driver
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @var array mapping from physical types (keys) to abstract types (values)
 | 
						 * @var array mapping from physical column types (keys) to abstract column types (values)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public $typeMap = array( // dbType => type
 | 
						public $typeMap = array( // dbType => type
 | 
				
			||||||
		'tinyint' => self::TYPE_SMALLINT,
 | 
							'tinyint' => self::TYPE_SMALLINT,
 | 
				
			||||||
@ -260,4 +260,14 @@ class Driver extends \yii\db\dao\Driver
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		return $names;
 | 
							return $names;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Creates a query builder for the database.
 | 
				
			||||||
 | 
						 * This method may be overridden by child classes to create a DBMS-specific query builder.
 | 
				
			||||||
 | 
						 * @return QueryBuilder query builder instance
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public function createQueryBuilder()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return new QueryBuilder($this->connection);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -19,10 +19,10 @@ namespace yii\db\dao\mysql;
 | 
				
			|||||||
class QueryBuilder extends \yii\db\dao\QueryBuilder
 | 
					class QueryBuilder extends \yii\db\dao\QueryBuilder
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @var array the abstract column types mapped to physical column types.
 | 
						 * @var array mapping from abstract column types (keys) to physical column types (values).
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
    public $typeMap = array(
 | 
					    public $typeMap = array(
 | 
				
			||||||
		'pk' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
 | 
							Driver::TYPE_PK => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
 | 
				
			||||||
		Driver::TYPE_STRING => 'varchar(255)',
 | 
							Driver::TYPE_STRING => 'varchar(255)',
 | 
				
			||||||
		Driver::TYPE_TEXT => 'text',
 | 
							Driver::TYPE_TEXT => 'text',
 | 
				
			||||||
		Driver::TYPE_SMALLINT => 'smallint(6)',
 | 
							Driver::TYPE_SMALLINT => 'smallint(6)',
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user