Вход Регистрация
Файл: 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;
    }
}
?>
Онлайн: 2
Реклама