p0larbeer
11 years ago
3 changed files with 421 additions and 375 deletions
@ -1,88 +1,92 @@ |
|||||||
<?php |
<?php |
||||||
namespace yii\db\oci; |
namespace yii\db\oci; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ColumnSchema extends \yii\db\ColumnSchema |
class ColumnSchema extends \yii\db\ColumnSchema |
||||||
{ |
{ |
||||||
|
|
||||||
/** |
/** |
||||||
* Initializes the column with its DB type and default value. |
* 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. |
* 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 |
* @param string $dbType |
||||||
|
* the column's DB type |
||||||
|
* @param mixed $defaultValue |
||||||
|
* the default value |
||||||
*/ |
*/ |
||||||
public function extract($dbType, $defaultValue) |
public function extract($dbType, $defaultValue) |
||||||
{ |
{ |
||||||
$this->dbType=$dbType; |
$this->dbType = $dbType; |
||||||
$this->extractType($dbType); |
$this->extractType($dbType); |
||||||
$this->extractLimit($dbType); |
$this->extractLimit($dbType); |
||||||
if($defaultValue!==null) |
if ($defaultValue !== null) |
||||||
$this->extractDefault($defaultValue); |
$this->extractDefault($defaultValue); |
||||||
} |
} |
||||||
|
|
||||||
/** |
/** |
||||||
* Extracts the PHP type from DB type. |
* Extracts the PHP type from DB type. |
||||||
* @param string $dbType DB type |
* |
||||||
|
* @param string $dbType |
||||||
|
* DB type |
||||||
* @return string |
* @return string |
||||||
*/ |
*/ |
||||||
protected function extractOraType($dbType){ |
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 (strpos($dbType, 'FLOAT') !== false) |
||||||
if(isset($values[1]) and (((int)$values[1]) > 0)) |
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'; |
return 'double'; |
||||||
else |
else |
||||||
return 'integer'; |
return 'integer'; |
||||||
} |
} else |
||||||
else |
|
||||||
return 'double'; |
return 'double'; |
||||||
} |
} else |
||||||
else |
|
||||||
return 'string'; |
return 'string'; |
||||||
} |
} |
||||||
|
|
||||||
/** |
/** |
||||||
* Extracts the PHP type from DB type. |
* Extracts the PHP type from DB type. |
||||||
* @param string $dbType DB type |
* |
||||||
|
* @param string $dbType |
||||||
|
* DB type |
||||||
*/ |
*/ |
||||||
protected function extractType($dbType) |
protected function extractType($dbType) |
||||||
{ |
{ |
||||||
$this->type=$this->extractOraType($dbType); |
$this->type = $this->extractOraType($dbType); |
||||||
} |
} |
||||||
|
|
||||||
/** |
/** |
||||||
* Extracts size, precision and scale information from column's DB type. |
* Extracts size, precision and scale information from column's DB type. |
||||||
* @param string $dbType the column's DB type |
* |
||||||
|
* @param string $dbType |
||||||
|
* the column's DB type |
||||||
*/ |
*/ |
||||||
protected function extractLimit($dbType) |
protected function extractLimit($dbType) |
||||||
{ |
{ |
||||||
if(strpos($dbType,'(') && preg_match('/\((.*)\)/',$dbType,$matches)) |
if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) { |
||||||
{ |
$values = explode(',', $matches[1]); |
||||||
$values=explode(',',$matches[1]); |
$this->size = $this->precision = (int) $values[0]; |
||||||
$this->size=$this->precision=(int)$values[0]; |
if (isset($values[1])) |
||||||
if(isset($values[1])) |
$this->scale = (int) $values[1]; |
||||||
$this->scale=(int)$values[1]; |
|
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
/** |
/** |
||||||
* Extracts the default value for the column. |
* Extracts the default value for the column. |
||||||
* The value is typecasted to correct PHP type. |
* The value is typecasted to correct PHP type. |
||||||
* @param mixed $defaultValue the default value obtained from metadata |
* |
||||||
|
* @param mixed $defaultValue |
||||||
|
* the default value obtained from metadata |
||||||
*/ |
*/ |
||||||
protected function extractDefault($defaultValue) |
protected function extractDefault($defaultValue) |
||||||
{ |
{ |
||||||
if(stripos($defaultValue,'timestamp')!==false) { |
if (stripos($defaultValue, 'timestamp') !== false) { |
||||||
$this->defaultValue=null; |
$this->defaultValue = null; |
||||||
} |
} else { |
||||||
else { |
$this->defaultValue = $this->typecast($defaultValue); |
||||||
$this->defaultValue=$this->typecast($defaultValue); |
|
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
} |
} |
||||||
|
Loading…
Reference in new issue