p0larbeer
11 years ago
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