diff --git a/lib/Doctrine/Cache/Db.php b/lib/Doctrine/Cache/Db.php new file mode 100644 index 000000000..8c440104d --- /dev/null +++ b/lib/Doctrine/Cache/Db.php @@ -0,0 +1,129 @@ +. + */ + +/** + * Doctrine_Cache_Sqlite + * + * @package Doctrine + * @subpackage Doctrine_Cache + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision$ + * @author Konsta Vesterinen + */ +class Doctrine_Cache_Db extends Doctrine_Cache_Driver implements Countable +{ + /** + * constructor + * + * @param array $_options an array of options + */ + public function __construct($options) + { + if ( ! isset($options['connection']) || + ! ($options['connection'] instanceof Doctrine_Connection)) { + + throw new Doctrine_Cache_Exception('Connection option not set.'); + } + + $this->_options = $options; + } + /** + * getConnection + * returns the connection object associated with this cache driver + * + * @return Doctrine_Connection connection object + */ + public function getConnection() + { + return $this->_options['connection']; + } + /** + * Test if a cache is available for the given id and (if yes) return it (false else) + * + * Note : return value is always "string" (unserialization is done by the core not by the backend) + * + * @param string $id cache id + * @param boolean $testCacheValidity if set to false, the cache validity won't be tested + * @return string cached datas (or false) + */ + public function fetch($id, $testCacheValidity = true) + { + $sql = 'SELECT data, expires FROM cache WHERE id = ?'; + $result = $this->getConnection()->fetchAssoc($sql, array($id)); + + return unserialize($result['data']); + } + /** + * Test if a cache is available or not (for the given id) + * + * @param string $id cache id + * @return mixed false (a cache is not available) or "last modified" timestamp (int) of the available cache record + */ + public function contains($id) + { + $sql = 'SELECT expires FROM cache WHERE id = ?'; + + return $this->getConnection()->fetchOne($sql, array($id)); + } + /** + * Save some string datas into a cache record + * + * Note : $data is always saved as a string + * + * @param string $data data to cache + * @param string $id cache id + * @param int $lifeTime if != false, set a specific lifetime for this cache record (null => infinite lifeTime) + * @return boolean true if no problem + */ + public function save($data, $id, $lifeTime = false) + { + $sql = 'INSERT INTO cache (id, data, expires) VALUES (?, ?, ?)'; + + $params = array($id, serialize($data), (time() + $lifeTime)); + + return (bool) $this->getConnection()->exec($sql, $params); + } + /** + * Remove a cache record + * + * @param string $id cache id + * @return boolean true if no problem + */ + public function delete($id) + { + $sql = 'DELETE FROM cache WHERE id = ?'; + + return (bool) $this->getConnection()->exec($sql, array($id)); + } + /** + * count + * returns the number of cached elements + * + * @return integer + */ + public function count() + { + return (int) $this->getConnection()->fetchOne('SELECT COUNT(*) FROM cache'); + } +}