You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							2.6 KiB
						
					
					
				<?php | 
						|
namespace yii\db\oci; | 
						|
 | 
						|
class ColumnSchema extends \yii\db\ColumnSchema | 
						|
{ | 
						|
 | 
						|
    /** | 
						|
     * Initializes the column with its DB type and default value. | 
						|
     * This sets up the column's PHP type, size, precision, scale as well as default value. | 
						|
     *  | 
						|
     * @param string $dbType | 
						|
     *            the column's DB type | 
						|
     * @param mixed $defaultValue | 
						|
     *            the default value | 
						|
     */ | 
						|
    public function extract($dbType, $defaultValue) | 
						|
    { | 
						|
        $this->dbType = $dbType; | 
						|
        $this->extractType($dbType); | 
						|
        $this->extractLimit($dbType); | 
						|
        if ($defaultValue !== null) | 
						|
            $this->extractDefault($defaultValue); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Extracts the PHP type from DB type. | 
						|
     *  | 
						|
     * @param string $dbType | 
						|
     *            DB type | 
						|
     * @return string | 
						|
     */ | 
						|
    protected function extractOraType($dbType) | 
						|
    { | 
						|
        if (strpos($dbType, 'FLOAT') !== false) | 
						|
            return 'double'; | 
						|
         | 
						|
        if (strpos($dbType, 'NUMBER') !== false || strpos($dbType, 'INTEGER') !== false) { | 
						|
            if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) { | 
						|
                $values = explode(',', $matches[1]); | 
						|
                if (isset($values[1]) and (((int) $values[1]) > 0)) | 
						|
                    return 'double'; | 
						|
                else | 
						|
                    return 'integer'; | 
						|
            } else | 
						|
                return 'double'; | 
						|
        } else | 
						|
            return 'string'; | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Extracts the PHP type from DB type. | 
						|
     *  | 
						|
     * @param string $dbType | 
						|
     *            DB type | 
						|
     */ | 
						|
    protected function extractType($dbType) | 
						|
    { | 
						|
        $this->type = $this->extractOraType($dbType); | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Extracts size, precision and scale information from column's DB type. | 
						|
     *  | 
						|
     * @param string $dbType | 
						|
     *            the column's DB type | 
						|
     */ | 
						|
    protected function extractLimit($dbType) | 
						|
    { | 
						|
        if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) { | 
						|
            $values = explode(',', $matches[1]); | 
						|
            $this->size = $this->precision = (int) $values[0]; | 
						|
            if (isset($values[1])) | 
						|
                $this->scale = (int) $values[1]; | 
						|
        } | 
						|
    } | 
						|
 | 
						|
    /** | 
						|
     * Extracts the default value for the column. | 
						|
     * The value is typecasted to correct PHP type. | 
						|
     *  | 
						|
     * @param mixed $defaultValue | 
						|
     *            the default value obtained from metadata | 
						|
     */ | 
						|
    protected function extractDefault($defaultValue) | 
						|
    { | 
						|
        if (stripos($defaultValue, 'timestamp') !== false) { | 
						|
            $this->defaultValue = null; | 
						|
        } else { | 
						|
            $this->defaultValue = $this->typecast($defaultValue); | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |