mirror of
https://github.com/dg/dibi.git
synced 2025-08-05 21:58:10 +02:00
Column::detectTypes() moved to Helpers
This commit is contained in:
@@ -12,6 +12,9 @@ class Helpers
|
|||||||
{
|
{
|
||||||
use Strict;
|
use Strict;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private static $types;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prints out a syntax highlighted version of the SQL command or Result.
|
* Prints out a syntax highlighted version of the SQL command or Result.
|
||||||
* @param string|Result
|
* @param string|Result
|
||||||
@@ -129,4 +132,45 @@ class Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Heuristic type detection.
|
||||||
|
* @param string
|
||||||
|
* @return string|NULL
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public static function detectType($type)
|
||||||
|
{
|
||||||
|
static $patterns = [
|
||||||
|
'^_' => Type::TEXT, // PostgreSQL arrays
|
||||||
|
'BYTEA|BLOB|BIN' => Type::BINARY,
|
||||||
|
'TEXT|CHAR|POINT|INTERVAL' => Type::TEXT,
|
||||||
|
'YEAR|BYTE|COUNTER|SERIAL|INT|LONG|SHORT' => Type::INTEGER,
|
||||||
|
'CURRENCY|REAL|MONEY|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER' => Type::FLOAT,
|
||||||
|
'^TIME$' => Type::TIME,
|
||||||
|
'TIME' => Type::DATETIME, // DATETIME, TIMESTAMP
|
||||||
|
'DATE' => Type::DATE,
|
||||||
|
'BOOL' => Type::BOOL,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($patterns as $s => $val) {
|
||||||
|
if (preg_match("#$s#i", $type)) {
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public static function getTypeCache()
|
||||||
|
{
|
||||||
|
if (self::$types === NULL) {
|
||||||
|
self::$types = new HashMap([__CLASS__, 'detectType']);
|
||||||
|
}
|
||||||
|
return self::$types;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -29,9 +29,6 @@ class Column
|
|||||||
{
|
{
|
||||||
use Dibi\Strict;
|
use Dibi\Strict;
|
||||||
|
|
||||||
/** @var array */
|
|
||||||
private static $types;
|
|
||||||
|
|
||||||
/** @var Dibi\Reflector|NULL when created by Result */
|
/** @var Dibi\Reflector|NULL when created by Result */
|
||||||
private $reflector;
|
private $reflector;
|
||||||
|
|
||||||
@@ -99,7 +96,7 @@ class Column
|
|||||||
*/
|
*/
|
||||||
public function getType()
|
public function getType()
|
||||||
{
|
{
|
||||||
return self::getTypeCache()->{$this->info['nativetype']};
|
return Dibi\Helpers::getTypeCache()->{$this->info['nativetype']};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -166,45 +163,4 @@ class Column
|
|||||||
return isset($this->info['vendor'][$key]) ? $this->info['vendor'][$key] : NULL;
|
return isset($this->info['vendor'][$key]) ? $this->info['vendor'][$key] : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Heuristic type detection.
|
|
||||||
* @param string
|
|
||||||
* @return string|NULL
|
|
||||||
* @internal
|
|
||||||
*/
|
|
||||||
public static function detectType($type)
|
|
||||||
{
|
|
||||||
static $patterns = [
|
|
||||||
'^_' => Type::TEXT, // PostgreSQL arrays
|
|
||||||
'BYTEA|BLOB|BIN' => Type::BINARY,
|
|
||||||
'TEXT|CHAR|POINT|INTERVAL' => Type::TEXT,
|
|
||||||
'YEAR|BYTE|COUNTER|SERIAL|INT|LONG|SHORT' => Type::INTEGER,
|
|
||||||
'CURRENCY|REAL|MONEY|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER' => Type::FLOAT,
|
|
||||||
'^TIME$' => Type::TIME,
|
|
||||||
'TIME' => Type::DATETIME, // DATETIME, TIMESTAMP
|
|
||||||
'DATE' => Type::DATE,
|
|
||||||
'BOOL' => Type::BOOL,
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach ($patterns as $s => $val) {
|
|
||||||
if (preg_match("#$s#i", $type)) {
|
|
||||||
return $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*/
|
|
||||||
public static function getTypeCache()
|
|
||||||
{
|
|
||||||
if (self::$types === NULL) {
|
|
||||||
self::$types = new Dibi\HashMap([__CLASS__, 'detectType']);
|
|
||||||
}
|
|
||||||
return self::$types;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -468,7 +468,7 @@ class Result implements IDataSource
|
|||||||
*/
|
*/
|
||||||
private function detectTypes()
|
private function detectTypes()
|
||||||
{
|
{
|
||||||
$cache = Reflection\Column::getTypeCache();
|
$cache = Helpers::getTypeCache();
|
||||||
try {
|
try {
|
||||||
foreach ($this->getResultDriver()->getResultColumns() as $col) {
|
foreach ($this->getResultDriver()->getResultColumns() as $col) {
|
||||||
$this->types[$col['name']] = $cache->{$col['nativetype']};
|
$this->types[$col['name']] = $cache->{$col['nativetype']};
|
||||||
|
Reference in New Issue
Block a user