Вход Регистрация
Файл: onlinepoisk.wm-scripts.ru/vendor/AR/lib/adapters/OciAdapter.php
Строк: 162
<?php
/**
 * @package ActiveRecord
 */
namespace ActiveRecord;

use 
PDO;

/**
 * Adapter for OCI (not completed yet).
 * 
 * @package ActiveRecord
 */
class OciAdapter extends Connection
{
    static 
$QUOTE_CHARACTER '';
    static 
$DEFAULT_PORT 1521;

    protected function 
__construct($info)
    {
        try {
            
$this->connection = new PDO("oci:dbname=//$info->host/$info->db",$info->user,$info->pass,static::$PDO_OPTIONS);
        } catch (
PDOException $e) {
            throw new 
DatabaseException($e);
        }
    }

    public function 
supports_sequences() { return true; }
    
    public function 
get_next_sequence_value($sequence_name)
    {
        return 
$this->query_and_fetch_one('SELECT ' $this->next_sequence_value($sequence_name) . ' FROM dual');
    }

    public function 
next_sequence_value($sequence_name)
    {
        return 
"$sequence_name.nextval";
    }

    public function 
date_to_string($datetime)
    {
        return 
$datetime->format('d-M-Y');
    }

    public function 
datetime_to_string($datetime)
    {
        return 
$datetime->format('d-M-Y h:i:s A');
    }

    
// $string = DD-MON-YYYY HH12:MI:SS(.[0-9]+) AM
    
public function string_to_datetime($string)
    {
        return 
parent::string_to_datetime(str_replace('.000000','',$string));
    }

    public function 
limit($sql$offset$limit)
    {
        
$offset intval($offset);
        
$stop $offset intval($limit);
        return 
            
"SELECT * FROM (SELECT a.*, rownum ar_rnum__ FROM ($sql) a " .
            
"WHERE rownum <= $stop) WHERE ar_rnum__ > $offset";
    }

    public function 
query_column_info($table)
    {
        
$sql 
            
"SELECT c.column_name, c.data_type, c.data_length, c.data_scale, c.data_default, c.nullable, " .
                
"(SELECT a.constraint_type " .
                
"FROM all_constraints a, all_cons_columns b " .
                
"WHERE a.constraint_type='P' " .
                
"AND a.constraint_name=b.constraint_name " .
                
"AND a.table_name = t.table_name AND b.column_name=c.column_name) AS pk " .
            
"FROM user_tables t " .
            
"INNER JOIN user_tab_columns c on(t.table_name=c.table_name) " .
            
"WHERE t.table_name=?";

        
$values = array(strtoupper($table));
        return 
$this->query($sql,$values);
    }

    public function 
query_for_tables()
    {
        return 
$this->query("SELECT table_name FROM user_tables");
    }

    public function 
create_column(&$column)
    {
        
$column['column_name'] = strtolower($column['column_name']);
        
$column['data_type'] = strtolower(preg_replace('/(.*?)/','',$column['data_type']));

        if (
$column['data_default'] !== null)
            
$column['data_default'] = trim($column['data_default'],"' ");

        if (
$column['data_type'] == 'number')
        {
            if (
$column['data_scale'] > 0)
                
$column['data_type'] = 'decimal';
            elseif (
$column['data_scale'] == 0)
                
$column['data_type'] = 'int';
        }

        
$c = new Column();
        
$c->inflected_name    Inflector::instance()->variablize($column['column_name']);
        
$c->name            $column['column_name'];
        
$c->nullable        $column['nullable'] == 'Y' true false;
        
$c->pk                $column['pk'] == 'P' true false;
        
$c->length            $column['data_length'];
    
        if (
$column['data_type'] == 'timestamp')
            
$c->raw_type 'datetime';
        else
            
$c->raw_type $column['data_type'];

        
$c->map_raw_type();
        
$c->default    $c->cast($column['data_default'],$this);

        return 
$c;
    }
};
?>
Онлайн: 0
Реклама