From fcb45e6479d4c13084c8033e543e0c1fdeead8e5 Mon Sep 17 00:00:00 2001 From: wei <> Date: Tue, 30 Jan 2007 01:07:15 +0000 Subject: add column type values for mysql --- .../ActiveRecord/Vendor/TMysqlColumnMetaData.php | 41 +++++++++++++++++++++- .../ActiveRecord/Vendor/TSqliteColumnMetaData.php | 25 ++++++++++++- .../simple_unit/ActiveRecord/FindByPksTestCase.php | 10 ++++-- 3 files changed, 72 insertions(+), 4 deletions(-) diff --git a/framework/Data/ActiveRecord/Vendor/TMysqlColumnMetaData.php b/framework/Data/ActiveRecord/Vendor/TMysqlColumnMetaData.php index d659851f..7c841181 100644 --- a/framework/Data/ActiveRecord/Vendor/TMysqlColumnMetaData.php +++ b/framework/Data/ActiveRecord/Vendor/TMysqlColumnMetaData.php @@ -26,6 +26,9 @@ class TMysqlColumnMetaData extends TComponent private $_default; private $_notNull=true; private $_property; + private $_length; + + private $_typeValues; private $_isPrimary=null; @@ -43,11 +46,47 @@ class TMysqlColumnMetaData extends TComponent { $this->_property=$property; $this->_name=$name; - $this->_type=$type; + //$this->_type=$type; $this->_notNull=$notNull; $this->_autoIncrement=$autoIncrement; $this->_default=$default; $this->_isPrimary=$primary; + $this->processType($type); + } + + protected function processType($type) + { + if(is_int($pos=strpos($type, '('))) + { + $match=array(); + if(preg_match('/\((.*)\)/', $type, $match)) + { + $this->_type = substr($type,0,$pos); + switch(strtolower($this->_type)) + { + case 'set': + case 'enum': + $this->_typeValues = preg_split('/\s*,\s*|\s+/', preg_replace('/\'|"/', '', $match[1])); + break; + default: + $this->_length=floatval($match[1]); + } + } + else + $this->_type = $type; + } + else + $this->_type = $type; + } + + public function getTypeValues() + { + return $this->_typeValues; + } + + public function getLength() + { + return $this->_length; } /** diff --git a/framework/Data/ActiveRecord/Vendor/TSqliteColumnMetaData.php b/framework/Data/ActiveRecord/Vendor/TSqliteColumnMetaData.php index 92315a1a..8f4ded39 100644 --- a/framework/Data/ActiveRecord/Vendor/TSqliteColumnMetaData.php +++ b/framework/Data/ActiveRecord/Vendor/TSqliteColumnMetaData.php @@ -29,16 +29,39 @@ class TSqliteColumnMetaData extends TComponent private $_default; private $_primary=false; private $_property; + private $_length; public function __construct($property,$name,$type,$notNull,$autoIncrement,$default,$primary) { $this->_property=$property; $this->_name=$name; - $this->_type=$type; $this->_notNull=$notNull; $this->_autoIncrement=$autoIncrement; $this->_default=$default; $this->_primary=$primary; + $this->processType($type); + } + + protected function processType($type) + { + if(is_int($pos=strpos($type, '('))) + { + $match=array(); + if(preg_match('/\((.*)\)/', $type, $match)) + { + $this->_length=floatval($match[1]); + $this->_type = substr($type,0,$pos); + } + else + $this->_type = $type; + } + else + $this->_type = $type; + } + + public function getLength() + { + return $this->_length; } public function getPHPType() diff --git a/tests/simple_unit/ActiveRecord/FindByPksTestCase.php b/tests/simple_unit/ActiveRecord/FindByPksTestCase.php index e7f3e3d0..e3ba0358 100644 --- a/tests/simple_unit/ActiveRecord/FindByPksTestCase.php +++ b/tests/simple_unit/ActiveRecord/FindByPksTestCase.php @@ -1,5 +1,4 @@ -assertEqual($dep->department_id, 1); } + function test_find_by_1pk_array() + { + $dep = DepartmentRecord::finder()->findByPk(array(1)); + $this->assertNotNull($dep); + $this->assertEqual($dep->department_id, 1); + } + function test_find_by_pks() { $deps = DepartmentRecord::finder()->findAllByPks(1,2,4); -- cgit v1.2.3