From 1dd651df51c5d0da946bc796ca9aade1e73ec244 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Tue, 27 Dec 2011 17:33:51 -0500 Subject: [PATCH] ... --- framework/db/dao/Driver.php | 1 + framework/db/dao/mysql/ColumnSchema.php | 107 -------------------------------- framework/db/dao/mysql/Driver.php | 12 +++- framework/db/dao/mysql/QueryBuilder.php | 4 +- 4 files changed, 14 insertions(+), 110 deletions(-) delete mode 100644 framework/db/dao/mysql/ColumnSchema.php diff --git a/framework/db/dao/Driver.php b/framework/db/dao/Driver.php index 387505a..e183749 100644 --- a/framework/db/dao/Driver.php +++ b/framework/db/dao/Driver.php @@ -29,6 +29,7 @@ abstract class Driver extends \yii\base\Object /** * The followings are the supported abstract column data types. */ + const TYPE_PK = 'pk'; const TYPE_STRING = 'string'; const TYPE_TEXT = 'text'; const TYPE_SMALLINT = 'smallint'; diff --git a/framework/db/dao/mysql/ColumnSchema.php b/framework/db/dao/mysql/ColumnSchema.php deleted file mode 100644 index f292d3e..0000000 --- a/framework/db/dao/mysql/ColumnSchema.php +++ /dev/null @@ -1,107 +0,0 @@ - - * @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 - * @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); - } - } -} \ No newline at end of file diff --git a/framework/db/dao/mysql/Driver.php b/framework/db/dao/mysql/Driver.php index 6dbb0d4..b995e88 100644 --- a/framework/db/dao/mysql/Driver.php +++ b/framework/db/dao/mysql/Driver.php @@ -22,7 +22,7 @@ use yii\db\dao\ColumnSchema; 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 'tinyint' => self::TYPE_SMALLINT, @@ -260,4 +260,14 @@ class Driver extends \yii\db\dao\Driver } 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); + } } diff --git a/framework/db/dao/mysql/QueryBuilder.php b/framework/db/dao/mysql/QueryBuilder.php index 35838f3..5f5934c 100644 --- a/framework/db/dao/mysql/QueryBuilder.php +++ b/framework/db/dao/mysql/QueryBuilder.php @@ -19,10 +19,10 @@ namespace yii\db\dao\mysql; 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( - '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_TEXT => 'text', Driver::TYPE_SMALLINT => 'smallint(6)',