Файл: onlinepoisk.wm-scripts.ru/vendor/AR/lib/Column.php
Строк: 102
<?php
/**
* @package ActiveRecord
*/
namespace ActiveRecord;
/**
* Class for a table column.
*
* @package ActiveRecord
*/
class Column
{
// types for $type
const STRING = 1;
const INTEGER = 2;
const DECIMAL = 3;
const DATETIME = 4;
const DATE = 5;
const TIME = 6;
/**
* Map a type to an column type.
* @static
* @var array
*/
static $TYPE_MAPPING = array(
'datetime' => self::DATETIME,
'timestamp' => self::DATETIME,
'date' => self::DATE,
'time' => self::TIME,
'int' => self::INTEGER,
'tinyint' => self::INTEGER,
'smallint' => self::INTEGER,
'mediumint' => self::INTEGER,
'bigint' => self::INTEGER,
'float' => self::DECIMAL,
'double' => self::DECIMAL,
'numeric' => self::DECIMAL,
'decimal' => self::DECIMAL,
'dec' => self::DECIMAL);
/**
* The true name of this column.
* @var string
*/
public $name;
/**
* The inflected name of this columns .. hyphens/spaces will be => _.
* @var string
*/
public $inflected_name;
/**
* The type of this column: STRING, INTEGER, ...
* @var integer
*/
public $type;
/**
* The raw database specific type.
* @var string
*/
public $raw_type;
/**
* The maximum length of this column.
* @var int
*/
public $length;
/**
* True if this column allows null.
* @var boolean
*/
public $nullable;
/**
* True if this column is a primary key.
* @var boolean
*/
public $pk;
/**
* The default value of the column.
* @var mixed
*/
public $default;
/**
* True if this column is set to auto_increment.
* @var boolean
*/
public $auto_increment;
/**
* Name of the sequence to use for this column if any.
* @var boolean
*/
public $sequence;
/**
* Casts a value to the column's type.
*
* @param mixed $value The value to cast
* @param Connection $connection The Connection this column belongs to
* @return mixed type-casted value
*/
public function cast($value, $connection)
{
if ($value === null)
return null;
switch ($this->type)
{
case self::STRING: return (string)$value;
case self::INTEGER: return (int)$value;
case self::DECIMAL: return (double)$value;
case self::DATETIME:
case self::DATE:
if (!$value)
return null;
if ($value instanceof DateTime)
return $value;
if ($value instanceof DateTime)
return new DateTime($value->format('Y-m-d H:i:s T'));
return $connection->string_to_datetime($value);
}
return $value;
}
/**
* Sets the $type member variable.
* @return mixed
*/
public function map_raw_type()
{
if ($this->raw_type == 'integer')
$this->raw_type = 'int';
if (array_key_exists($this->raw_type,self::$TYPE_MAPPING))
$this->type = self::$TYPE_MAPPING[$this->raw_type];
else
$this->type = self::STRING;
return $this->type;
}
}
?>