diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php index 07e15dfb..9ad7aaf5 100644 --- a/src/Dibi/Helpers.php +++ b/src/Dibi/Helpers.php @@ -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; + } + } diff --git a/src/Dibi/Reflection/Column.php b/src/Dibi/Reflection/Column.php index 6f26581a..b8b34ace 100644 --- a/src/Dibi/Reflection/Column.php +++ b/src/Dibi/Reflection/Column.php @@ -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; - } - } diff --git a/src/Dibi/Result.php b/src/Dibi/Result.php index fc7f88b9..d49cb11d 100644 --- a/src/Dibi/Result.php +++ b/src/Dibi/Result.php @@ -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']};