From 3d3f8d3832921f99daf8ce1953304763c2e76c62 Mon Sep 17 00:00:00 2001 From: wei <> Date: Fri, 14 Apr 2006 06:22:09 +0000 Subject: Importing SQLMap + sample + docs. --- .../SQLMap/Statements/TCachingStatement.php | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 framework/DataAccess/SQLMap/Statements/TCachingStatement.php (limited to 'framework/DataAccess/SQLMap/Statements/TCachingStatement.php') diff --git a/framework/DataAccess/SQLMap/Statements/TCachingStatement.php b/framework/DataAccess/SQLMap/Statements/TCachingStatement.php new file mode 100644 index 00000000..8e4e2a3d --- /dev/null +++ b/framework/DataAccess/SQLMap/Statements/TCachingStatement.php @@ -0,0 +1,102 @@ + + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TCachingStatement implements IMappedStatement +{ + private $_mappedStatement; + + public function __construct(TMappedStatement $statement) + { + $this->_mappedStatement = $statement; + } + + public function getID() + { + return $this->_mappedStatement->getID(); + } + + public function getStatement() + { + return $this->_mappedStatement->getStatement(); + } + + public function getSqlMap() + { + return $this->_mappedStatement->getSqlMap(); + } + + public function executeQueryForMap($connection, $parameter, + $keyProperty, $valueProperty=null, $delegate=null) + { + $sql = $this->createCommand($connection, $parameter); + $key = $this->getCacheKey(array($sql, $keyProperty, $valueProperty)); + $map = $this->getStatement()->getCache()->get($key); + if(is_null($map)) + { + $map = $this->_mappedStatement->runQueryForMap( + $connection, $parameter, $sql, $keyProperty, $valueProperty, $delegate); + $this->getStatement()->getCache()->set($key, $map); + } + return $map; + } + + public function executeUpdate($connection, $parameter) + { + return $this->_mappedStatement->executeUpdate($connection, $parameter); + } + + public function executeInsert($connection, $parameter) + { + return $this->executeInsert($connection, $parameter); + } + + public function executeQueryForList($connection, $parameter, + $result, $skip=-1, $max=-1, $delegate=null) + { + $sql = $this->createCommand($connection, $parameter); + $key = $this->getCacheKey(array($sql, $skip, $max)); + $list = $this->getStatement()->getCache()->get($key); + if(is_null($list)) + { + $list = $this->_mappedStatement->runQueryForList( + $connection, $parameter, $sql, $result, $skip, $max, $delegate); + $this->getStatement()->getCache()->set($key, $list); + } + return $list; + } + + public function executeQueryForObject($connection, $parameter, $result) + { + $sql = $this->createCommand($connection, $parameter); + $key = $this->getCacheKey($sql); + $object = $this->getStatement()->getCache()->get($key); + if(is_null($object)) + { + $object = $this->_mappedStatement->runQueryForObject( + $connection, $sql, $result); + $this->getStatement()->getCache()->set($key, $object); + } + return $object; + } + + protected function getCacheKey($object) + { + $cacheKey = new TSqlMapCacheKey($object); + return $cacheKey->getHash(); + } + + protected function createCommand($connection, $parameter) + { + return $this->_mappedStatement->getCommand()->create( + $connection, $this->getStatement(), $parameter); + } +} + +?> \ No newline at end of file -- cgit v1.2.3