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.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							88 lines
						
					
					
						
							2.3 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); | |
| 		} | |
| 	} | |
|      | |
| }
 | |
| 
 |