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.
89 lines
2.3 KiB
89 lines
2.3 KiB
11 years ago
|
<?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);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|