mirror of
https://github.com/dg/dibi.git
synced 2025-08-05 05:37:39 +02:00
Column::detectTypes() moved to Helpers
This commit is contained in:
@@ -12,6 +12,9 @@ class Helpers
|
||||
{
|
||||
use Strict;
|
||||
|
||||
/** @var array */
|
||||
private static $types;
|
||||
|
||||
/**
|
||||
* Prints out a syntax highlighted version of the SQL command or 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;
|
||||
|
||||
/** @var array */
|
||||
private static $types;
|
||||
|
||||
/** @var Dibi\Reflector|NULL when created by Result */
|
||||
private $reflector;
|
||||
|
||||
@@ -99,7 +96,7 @@ class Column
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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()
|
||||
{
|
||||
$cache = Reflection\Column::getTypeCache();
|
||||
$cache = Helpers::getTypeCache();
|
||||
try {
|
||||
foreach ($this->getResultDriver()->getResultColumns() as $col) {
|
||||
$this->types[$col['name']] = $cache->{$col['nativetype']};
|
||||
|
Reference in New Issue
Block a user