From f6a5e7589396854e10e023c25237b47e512ff047 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 14 Apr 2006 11:23:56 +0000 Subject: Adding SQLMap unit tests. Allow sqlmap to use Prado's caching module to cache records. --- .../SQLMap/Configuration/TConfigDeserialize.php | 4 +- .../SQLMap/Configuration/TSqlMapCacheModel.php | 12 ++-- .../DataAccess/SQLMap/DataMapper/TSqlMapCache.php | 73 +++++++++++++++++++++- .../DataAccess/SQLMap/DataMapper/messages.txt | 3 +- framework/DataAccess/SQLMap/TSqlMapClient.php | 3 - framework/DataAccess/SQLMap/TSqlMapper.php | 3 +- 6 files changed, 82 insertions(+), 16 deletions(-) (limited to 'framework/DataAccess') diff --git a/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php b/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php index 250133b9..9a44d1ec 100644 --- a/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php +++ b/framework/DataAccess/SQLMap/Configuration/TConfigDeserialize.php @@ -144,7 +144,7 @@ class TConfigDeserialize { $cacheModel = new TSqlMapCacheModel; $this->loadConfiguration($cacheModel, $node, $file); - if(isset($node->flushInterval)) +/* if(isset($node->flushInterval)) { $interval = $node->flushInterval; $span = 0; //span in seconds @@ -156,7 +156,7 @@ class TConfigDeserialize $span += intval($interval['seconds']); if($span > 0) $cacheModel->setFlushInterval($span); - } + }*/ if(isset($node->property)) { foreach($node->property as $property) diff --git a/framework/DataAccess/SQLMap/Configuration/TSqlMapCacheModel.php b/framework/DataAccess/SQLMap/Configuration/TSqlMapCacheModel.php index 6c945155..3bd20933 100644 --- a/framework/DataAccess/SQLMap/Configuration/TSqlMapCacheModel.php +++ b/framework/DataAccess/SQLMap/Configuration/TSqlMapCacheModel.php @@ -3,11 +3,11 @@ class TSqlMapCacheModel extends TComponent { private $_cache; - private $_flushInterval = -1; +// private $_flushInterval = -1; private $_hits = 0; private $_requests = 0; private $_id; - private $_lastFlush; +// private $_lastFlush; private $_implementation; private $_properties = array(); @@ -18,15 +18,15 @@ class TSqlMapCacheModel extends TComponent public function getImplementation(){ return $this->_implementation; } public function setImplementation($value){ $this->_implementation = $value; } - public function getFlushInterval(){ return $this->_flushInterval; } - public function setFlushInterval($value){ $this->_flushInterval = $value; } +// public function getFlushInterval(){ return $this->_flushInterval; } +// public function setFlushInterval($value){ $this->_flushInterval = $value; } public function initialize($sqlMap) { $implementation = $this->getImplementationClass( $sqlMap->getTypeHandlerFactory()); $this->_cache = new $implementation; - $this->_cache->configure($this->_properties); + $this->_cache->configure($this, $this->_properties); } protected function getImplementationClass($typeFactory) @@ -35,6 +35,7 @@ class TSqlMapCacheModel extends TComponent { case 'fifo': return 'TSqlMapFifoCache'; case 'lru' : return 'TSqlMapLruCache'; + case 'basic' : return 'TSqlMapApplicationCache'; } if(class_exists($this->_implementation, false)) @@ -66,7 +67,6 @@ class TSqlMapCacheModel extends TComponent public function flush() { - var_dump("flush!"); $this->_cache->flush(); } diff --git a/framework/DataAccess/SQLMap/DataMapper/TSqlMapCache.php b/framework/DataAccess/SQLMap/DataMapper/TSqlMapCache.php index 8571d46d..a62a7432 100644 --- a/framework/DataAccess/SQLMap/DataMapper/TSqlMapCache.php +++ b/framework/DataAccess/SQLMap/DataMapper/TSqlMapCache.php @@ -1,6 +1,6 @@ * @link http://www.pradosoft.com/ @@ -20,7 +20,7 @@ interface ISqLMapCache public function set($key, $value); - public function configure($properties); + public function configure($model, $properties); } /** @@ -54,7 +54,7 @@ abstract class TSqlMapCache implements ISqlMapCache * Configures the Cache Size. * @param array list of properties */ - public function configure($properties) + public function configure($model, $properties) { if(isset($properties['size'])) $this->_cacheSize = intval($properties['size']); @@ -161,5 +161,72 @@ class TSqlMapLruCache extends TSqlMapCache } } +class TSqlMapApplicationCache implements ISqlMapCache +{ + private $_cache; + private $_expiry=0; + private $_property=array(); + private $_cacheModelID; + + public function __sleep() + { + $this->_cache = null; + return array_keys(get_object_vars($this)); + } + + public function remove($key) + { + $this->getCache()->delete($key); + } + + public function flush() + { + $this->getCache()->flush(); + } + + public function get($key) + { + $result = $this->getCache()->get($key); + return $result === false ? null : $result; + } + + public function set($key, $value) + { + $this->getCache()->set($key, $value, $this->_expiry); + } + + public function configure($model, $properties) + { + $this->_property = $properties; + $this->_cacheModelID = $model->getID(); + } + + protected function getCache() + { + if(is_null($this->_cache)) + $this->initialize(); + return $this->_cache; + } + + protected function initialize() + { + if(isset($this->_property['expiry'])) + $this->_expiry = intval($this->_property['expiry']); + + if(isset($this->_property['cacheModule'])) + { + $id = $this->_property['cacheModule']; + $this->_cache = Prado::getApplication()->getModule($id); + } + else + { + $this->_cache = Prado::getApplication()->getCache(); + } + + if(!($this->_cache instanceof ICache)) + throw new TSqlMapConfigurationException( + 'sqlmap_invalid_prado_cache', $this->_cacheModelID); + } +} ?> \ No newline at end of file diff --git a/framework/DataAccess/SQLMap/DataMapper/messages.txt b/framework/DataAccess/SQLMap/DataMapper/messages.txt index 79c80ad5..6bf5f396 100644 --- a/framework/DataAccess/SQLMap/DataMapper/messages.txt +++ b/framework/DataAccess/SQLMap/DataMapper/messages.txt @@ -58,4 +58,5 @@ sqlmap_invalid_lazyload_list = Invalid type to lazy load, must specify a valid sqlmap_unable_to_find_resource = 'Unable to find SQLMap configuration file '{0}'. sqlmap_query_execution_error = Error in executing SQLMap statement '{0}' : '{1}'. sqlmap_undefined_discriminator = The discriminator is null, but somehow a subMap was reached in ResultMap '{0}' in file '{1}'. -sqlmap_invalid_delegate = Invalid callback row delegate '{1}' in mapped statement '{0}'. \ No newline at end of file +sqlmap_invalid_delegate = Invalid callback row delegate '{1}' in mapped statement '{0}'. +sqlmap_invalid_prado_cache = Unable to find Prado cache module for SQLMap cache '{0}'. \ No newline at end of file diff --git a/framework/DataAccess/SQLMap/TSqlMapClient.php b/framework/DataAccess/SQLMap/TSqlMapClient.php index 7662d83e..5f531f64 100644 --- a/framework/DataAccess/SQLMap/TSqlMapClient.php +++ b/framework/DataAccess/SQLMap/TSqlMapClient.php @@ -44,7 +44,6 @@ class TSqlMapClient { if(!is_file($this->_cache)) { - var_dump('saving cache to file', $this->_cache); file_put_contents($this->_cache,serialize($this->_mapper)); return true; } @@ -57,12 +56,10 @@ class TSqlMapClient $this->_cache = $this->getCacheFile($file); if($loadFromCache && $this->_cache !== false && is_file($this->_cache)) { - var_dump('loading from cache: '.$this->_cache); $this->_mapper = unserialize(file_get_contents($this->_cache)); } else { -// var_dump('build from *.xml'); $builder = new TDomSqlMapBuilder(); $this->_mapper = $builder->configure($file); } diff --git a/framework/DataAccess/SQLMap/TSqlMapper.php b/framework/DataAccess/SQLMap/TSqlMapper.php index 602b83ea..26e6c115 100644 --- a/framework/DataAccess/SQLMap/TSqlMapper.php +++ b/framework/DataAccess/SQLMap/TSqlMapper.php @@ -3,6 +3,7 @@ Prado::using('System.DataAccess.SQLMap.DataMapper.*'); Prado::using('System.DataAccess.SQLMap.Configuration.*'); Prado::using('System.DataAccess.SQLMap.Statements.*'); +Prado::using('System.Collections.*'); Prado::using('System.DataAccess.SQLMap.DataMapper.TTypeHandlerFactory'); Prado::using('System.DataAccess.SQLMap.DataMapper.TSqlMapCache'); Prado::using('System.DataAccess.SQLMap.DataMapper.TDataMapperException'); @@ -39,7 +40,7 @@ class TSqlMapper extends TComponent private $_resultMaps; private $_parameterMaps; private $_typeHandlerFactory; - private $_cacheModelsEnabled = false; + private $_cacheModelsEnabled = true; private $_cacheMaps; /** -- cgit v1.2.3