|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- /**
- * @link http://www.yiiframework.com/
- * @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
-
- namespace yii\db;
-
- use yii\base\Object;
-
- /**
- * ColumnSchema class describes the metadata of a column in a database table.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @since 2.0
- */
- class ColumnSchema extends Object
- {
- /**
- * @var string name of this column (without quotes).
- */
- public $name;
- /**
- * @var boolean whether this column can be null.
- */
- public $allowNull;
- /**
- * @var string abstract type of this column. Possible abstract types include:
- * char, string, text, boolean, smallint, integer, bigint, float, decimal, datetime,
- * timestamp, time, date, binary, and money.
- */
- public $type;
- /**
- * @var string the PHP type of this column. Possible PHP types include:
- * `string`, `boolean`, `integer`, `double`.
- */
- public $phpType;
- /**
- * @var string the DB type of this column. Possible DB types vary according to the type of DBMS.
- */
- public $dbType;
- /**
- * @var mixed default value of this column
- */
- public $defaultValue;
- /**
- * @var array enumerable values. This is set only if the column is declared to be an enumerable type.
- */
- public $enumValues;
- /**
- * @var integer display size of the column.
- */
- public $size;
- /**
- * @var integer precision of the column data, if it is numeric.
- */
- public $precision;
- /**
- * @var integer scale of the column data, if it is numeric.
- */
- public $scale;
- /**
- * @var boolean whether this column is a primary key
- */
- public $isPrimaryKey;
- /**
- * @var boolean whether this column is auto-incremental
- */
- public $autoIncrement = false;
- /**
- * @var boolean whether this column is unsigned. This is only meaningful
- * when [[type]] is `smallint`, `integer` or `bigint`.
- */
- public $unsigned;
- /**
- * @var string comment of this column. Not all DBMS support this.
- */
- public $comment;
-
-
- /**
- * Converts the input value according to [[phpType]] after retrieval from the database.
- * If the value is null or an [[Expression]], it will not be converted.
- * @param mixed $value input value
- * @return mixed converted value
- */
- public function phpTypecast($value)
- {
- return $this->typecast($value);
- }
-
- /**
- * Converts the input value according to [[type]] and [[dbType]] for use in a db query.
- * If the value is null or an [[Expression]], it will not be converted.
- * @param mixed $value input value
- * @return mixed converted value. This may also be an array containing the value as the first element
- * and the PDO type as the second element.
- */
- public function dbTypecast($value)
- {
- // the default implementation does the same as casting for PHP, but it should be possible
- // to override this with annotation of explicit PDO type.
- return $this->typecast($value);
- }
-
- /**
- * Converts the input value according to [[phpType]] after retrieval from the database.
- * If the value is null or an [[Expression]], it will not be converted.
- * @param mixed $value input value
- * @return mixed converted value
- * @since 2.0.3
- */
- protected function typecast($value)
- {
- if ($value === '' && $this->type !== Schema::TYPE_TEXT && $this->type !== Schema::TYPE_STRING && $this->type !== Schema::TYPE_BINARY && $this->type !== Schema::TYPE_CHAR) {
- return null;
- }
- if ($value === null || gettype($value) === $this->phpType || $value instanceof Expression) {
- return $value;
- }
- switch ($this->phpType) {
- case 'resource':
- case 'string':
- if (is_resource($value)) {
- return $value;
- }
- if (is_float($value)) {
- // ensure type cast always has . as decimal separator in all locales
- return str_replace(',', '.', (string) $value);
- }
- return (string) $value;
- case 'integer':
- return (int) $value;
- case 'boolean':
- // treating a 0 bit value as false too
- // https://github.com/yiisoft/yii2/issues/9006
- return (bool) $value && $value !== "\0";
- case 'double':
- return (double) $value;
- }
-
- return $value;
- }
- }
|