[2.0] Minor fixes to cache drivers and result set cache implementation
This commit is contained in:
parent
a4913774c8
commit
ccf27a386c
@ -41,7 +41,7 @@ abstract class AbstractCache implements Cache
|
||||
private $_namespace = null;
|
||||
|
||||
/** @var boolean Whether to manage cache keys or not. */
|
||||
private $_manageCacheKeys = false;
|
||||
private $_manageCacheIds = false;
|
||||
|
||||
/**
|
||||
* Sets whether cache keys should be managed by the cache driver
|
||||
@ -54,20 +54,20 @@ abstract class AbstractCache implements Cache
|
||||
*
|
||||
* @param boolean $bool
|
||||
*/
|
||||
public function setManageCacheKeys($bool)
|
||||
public function setManageCacheIds($bool)
|
||||
{
|
||||
$this->_manageCacheKeys = $bool;
|
||||
$this->_manageCacheIds = $bool;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether cache keys are managed by this cache driver.
|
||||
*
|
||||
* @return boolean
|
||||
* @see setManageCacheKeys()
|
||||
* @see setManageCacheIds()
|
||||
*/
|
||||
public function getManageCacheKeys()
|
||||
public function getManageCacheIds()
|
||||
{
|
||||
return $this->_manageCacheKeys;
|
||||
return $this->_manageCacheIds;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,7 +104,7 @@ abstract class AbstractCache implements Cache
|
||||
{
|
||||
$id = $this->_getNamespacedId($id);
|
||||
if ($this->_doSave($id, $data, $lifeTime)) {
|
||||
if ($this->_manageCacheKeys) {
|
||||
if ($this->_manageCacheIds) {
|
||||
$this->_saveId($id);
|
||||
}
|
||||
|
||||
@ -125,7 +125,7 @@ abstract class AbstractCache implements Cache
|
||||
}
|
||||
|
||||
if ($this->_doDelete($id)) {
|
||||
if ($this->_manageCacheKeys) {
|
||||
if ($this->_manageCacheIds) {
|
||||
$this->_deleteId($id);
|
||||
}
|
||||
|
||||
@ -141,7 +141,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function deleteAll()
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$ids = $this->getIds();
|
||||
foreach ($ids as $id) {
|
||||
$this->delete($id);
|
||||
@ -157,7 +157,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function deleteByRegex($regex)
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$deleted = array();
|
||||
$ids = $this->getIds();
|
||||
foreach ($ids as $id) {
|
||||
@ -177,7 +177,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function deleteByPrefix($prefix)
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$deleted = array();
|
||||
$ids = $this->getIds();
|
||||
foreach ($ids as $id) {
|
||||
@ -197,7 +197,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function deleteBySuffix($suffix)
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$deleted = array();
|
||||
$ids = $this->getIds();
|
||||
foreach ($ids as $id) {
|
||||
@ -216,7 +216,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$ids = $this->getIds();
|
||||
return $ids ? count($ids) : 0;
|
||||
}
|
||||
@ -228,7 +228,7 @@ abstract class AbstractCache implements Cache
|
||||
*/
|
||||
public function getIds()
|
||||
{
|
||||
$this->_errorIfCacheKeysNotManaged();
|
||||
$this->_errorIfCacheIdsNotManaged();
|
||||
$ids = $this->fetch($this->_cacheIdsIndexId);
|
||||
return $ids ? $ids : array();
|
||||
}
|
||||
@ -285,9 +285,9 @@ abstract class AbstractCache implements Cache
|
||||
/**
|
||||
* @throws BadMethodCallException If the cache driver does not manage cache keys.
|
||||
*/
|
||||
private function _errorIfCacheKeysNotManaged()
|
||||
private function _errorIfCacheIdsNotManaged()
|
||||
{
|
||||
if ( ! $this->_manageCacheKeys) {
|
||||
if ( ! $this->_manageCacheIds) {
|
||||
throw new \BadMethodCallException("Operation not supported if cache keys are not managed.");
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,9 @@ class ApcCache extends AbstractCache
|
||||
*/
|
||||
protected function _doContains($id)
|
||||
{
|
||||
return apc_fetch($id) === false ? false : true;
|
||||
$found = false;
|
||||
apc_fetch($id, $found);
|
||||
return $found;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -92,7 +92,14 @@ abstract class AbstractQuery
|
||||
*
|
||||
* @var CacheDriver
|
||||
*/
|
||||
protected $_resultCache;
|
||||
protected $_resultCacheDriver;
|
||||
|
||||
/**
|
||||
* Boolean flag for whether or not to cache the result sets of this query.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $_useResultCache;
|
||||
|
||||
/**
|
||||
* The id to store the result cache entry under.
|
||||
@ -211,13 +218,15 @@ abstract class AbstractQuery
|
||||
* @param Doctrine\Common\Cache\Cache $driver Cache driver
|
||||
* @return Doctrine\ORM\Query
|
||||
*/
|
||||
public function setResultCache($resultCache = null)
|
||||
public function setResultCacheDriver($resultCacheDriver = null)
|
||||
{
|
||||
if ($resultCache !== null && ! ($resultCache instanceof \Doctrine\Common\Cache\Cache)) {
|
||||
throw DoctrineException::invalidResultCacheObject($resultCache);
|
||||
if ($resultCacheDriver !== null && ! ($resultCacheDriver instanceof \Doctrine\Common\Cache\Cache)) {
|
||||
throw DoctrineException::invalidResultCacheObject($resultCacheDriver);
|
||||
}
|
||||
$this->_resultCacheDriver = $resultCacheDriver;
|
||||
if ($resultCacheDriver) {
|
||||
$this->_useResultCache = true;
|
||||
}
|
||||
$this->_resultCache = $resultCache;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -227,18 +236,33 @@ abstract class AbstractQuery
|
||||
*/
|
||||
public function getResultCacheDriver()
|
||||
{
|
||||
if ($this->_resultCache) {
|
||||
return $this->_resultCache;
|
||||
if ($this->_resultCacheDriver) {
|
||||
return $this->_resultCacheDriver;
|
||||
} else {
|
||||
return $this->_em->getConfiguration()->getResultCacheImpl();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether or not to cache the result sets for this query
|
||||
*
|
||||
* @param boolean $bool
|
||||
*/
|
||||
public function useResultCache($bool, $timeToLive = null, $resultCacheId = null)
|
||||
{
|
||||
$this->_useResultCache = $bool;
|
||||
if ($timeToLive) {
|
||||
$this->setResultCacheLifetime($timeToLive);
|
||||
}
|
||||
if ($resultCacheId) {
|
||||
$this->_resultCacheId = $resultCacheId;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines how long the result cache will be active before expire.
|
||||
*
|
||||
* @param integer $timeToLive How long the cache entry is valid
|
||||
* @return Doctrine\ORM\Query
|
||||
*/
|
||||
public function setResultCacheLifetime($timeToLive)
|
||||
{
|
||||
@ -247,8 +271,6 @@ abstract class AbstractQuery
|
||||
}
|
||||
|
||||
$this->_resultCacheTTL = $timeToLive;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -270,8 +292,6 @@ abstract class AbstractQuery
|
||||
public function setExpireResultCache($expire = true)
|
||||
{
|
||||
$this->_expireResultCache = $expire;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -289,12 +309,10 @@ abstract class AbstractQuery
|
||||
*
|
||||
* @param integer $hydrationMode Doctrine processing mode to be used during hydration process.
|
||||
* One of the Query::HYDRATE_* constants.
|
||||
* @return Doctrine\ORM\Query
|
||||
*/
|
||||
public function setHydrationMode($hydrationMode)
|
||||
{
|
||||
$this->_hydrationMode = $hydrationMode;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -443,7 +461,7 @@ abstract class AbstractQuery
|
||||
$params = $this->getParameters($params);
|
||||
|
||||
// Check result cache
|
||||
if ($cacheDriver = $this->getResultCacheDriver()) {
|
||||
if ($this->_useResultCache && $cacheDriver = $this->getResultCacheDriver()) {
|
||||
$id = $this->_getResultCacheId($params);
|
||||
$cached = $this->_expireResultCache ? false : $cacheDriver->fetch($id);
|
||||
|
||||
@ -481,7 +499,6 @@ abstract class AbstractQuery
|
||||
* generated for you.
|
||||
*
|
||||
* @param string $id
|
||||
* @return void
|
||||
*/
|
||||
public function setResultCacheId($id)
|
||||
{
|
||||
|
@ -11,7 +11,7 @@ class ArrayCacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testArrayCacheDriver()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
|
||||
// Test save
|
||||
$cache->save('test_key', 'testing this out');
|
||||
|
@ -11,7 +11,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testCount()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('test_key1', '1');
|
||||
$cache->save('test_key2', '2');
|
||||
$this->assertEquals($cache->count(), 2);
|
||||
@ -20,7 +20,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testDeleteAll()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('test_key1', '1');
|
||||
$cache->save('test_key2', '2');
|
||||
$cache->deleteAll();
|
||||
@ -31,7 +31,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testDeleteByRegex()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('test_key1', '1');
|
||||
$cache->save('test_key2', '2');
|
||||
$cache->deleteByRegex('/test_key[0-9]/');
|
||||
@ -42,7 +42,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testDeleteByPrefix()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('test_key1', '1');
|
||||
$cache->save('test_key2', '2');
|
||||
$cache->deleteByPrefix('test_key');
|
||||
@ -53,7 +53,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testDeleteBySuffix()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('1test_key', '1');
|
||||
$cache->save('2test_key', '2');
|
||||
$cache->deleteBySuffix('test_key');
|
||||
@ -64,7 +64,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testDeleteByWildcard()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->save('test_key1', '1');
|
||||
$cache->save('test_key2', '2');
|
||||
$cache->delete('test_key*');
|
||||
@ -75,7 +75,7 @@ class CacheTest extends \Doctrine\Tests\DoctrineTestCase
|
||||
public function testNamespace()
|
||||
{
|
||||
$cache = new ArrayCache();
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$cache->setNamespace('test_');
|
||||
$cache->save('key1', 'test');
|
||||
$this->assertTrue($cache->contains('key1'));
|
||||
|
@ -33,7 +33,7 @@ class QueryCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
$cache = new ArrayCache;
|
||||
$cache->setManageCacheKeys(true);
|
||||
$cache->setManageCacheIds(true);
|
||||
$query->setQueryCacheDriver($cache);
|
||||
$this->assertEquals(0, $cache->count());
|
||||
|
||||
|
@ -31,8 +31,8 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
$cache = new ArrayCache;
|
||||
$cache->setManageCacheKeys(true);
|
||||
$query->setResultCache($cache);
|
||||
$cache->setManageCacheIds(true);
|
||||
$query->setResultCacheDriver($cache);
|
||||
$this->assertEquals(0, $cache->count());
|
||||
|
||||
$users = $query->getResult();
|
||||
@ -44,7 +44,7 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$this->_em->clear();
|
||||
|
||||
$query2 = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
$query2->setResultCache($cache);
|
||||
$query2->setResultCacheDriver($cache);
|
||||
|
||||
$users = $query2->getResult();
|
||||
|
||||
@ -58,10 +58,25 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
$cache = new ArrayCache;
|
||||
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
$query->setResultCache($cache);
|
||||
$query->setResultCacheDriver($cache);
|
||||
$query->setResultCacheId('testing_result_cache_id');
|
||||
$users = $query->getResult();
|
||||
|
||||
$this->assertTrue($cache->contains('testing_result_cache_id'));
|
||||
}
|
||||
|
||||
public function testUseResultCache()
|
||||
{
|
||||
$cache = new \Doctrine\Common\Cache\ArrayCache();
|
||||
$this->_em->getConfiguration()->setResultCacheImpl($cache);
|
||||
|
||||
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||
$query->useResultCache(true);
|
||||
$query->setResultCacheId('testing_result_cache_id');
|
||||
$users = $query->getResult();
|
||||
|
||||
$this->assertTrue($cache->contains('testing_result_cache_id'));
|
||||
|
||||
$this->_em->getConfiguration()->setResultCacheImpl(null);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user