1 changed files with 88 additions and 0 deletions
			
			
		| @ -0,0 +1,88 @@ | |||||||
|  | <?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); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |      | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue