[2.0][DDC-47] Added ability to set the result cache id used to store the cache entry
This commit is contained in:
parent
93e6cabe04
commit
da38026bc2
@ -94,6 +94,13 @@ abstract class AbstractQuery
|
|||||||
*/
|
*/
|
||||||
protected $_resultCache;
|
protected $_resultCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The id to store the result cache entry under.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $_resultCacheId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var boolean Boolean value that indicates whether or not expire the result cache.
|
* @var boolean Boolean value that indicates whether or not expire the result cache.
|
||||||
*/
|
*/
|
||||||
@ -437,9 +444,8 @@ abstract class AbstractQuery
|
|||||||
|
|
||||||
// Check result cache
|
// Check result cache
|
||||||
if ($cacheDriver = $this->getResultCacheDriver()) {
|
if ($cacheDriver = $this->getResultCacheDriver()) {
|
||||||
// Calculate hash for DQL query.
|
$id = $this->_getResultCacheId($params);
|
||||||
$hash = md5($this->getDql() . var_export($params, true));
|
$cached = ($this->_expireResultCache) ? false : $cacheDriver->fetch($id);
|
||||||
$cached = ($this->_expireResultCache) ? false : $cacheDriver->fetch($hash);
|
|
||||||
|
|
||||||
if ($cached === false) {
|
if ($cached === false) {
|
||||||
// Cache miss.
|
// Cache miss.
|
||||||
@ -449,7 +455,7 @@ abstract class AbstractQuery
|
|||||||
$stmt, $this->_resultSetMapping, $this->_hints
|
$stmt, $this->_resultSetMapping, $this->_hints
|
||||||
);
|
);
|
||||||
|
|
||||||
$cacheDriver->save($hash, $result, $this->_resultCacheTTL);
|
$cacheDriver->save($id, $result, $this->_resultCacheTTL);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
} else {
|
} else {
|
||||||
@ -469,6 +475,36 @@ abstract class AbstractQuery
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the result cache id to use to store the result set cache entry.
|
||||||
|
* If this is not explicitely set by the developer then a hash is automatically
|
||||||
|
* generated for you.
|
||||||
|
*
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setResultCacheId($id)
|
||||||
|
{
|
||||||
|
$this->_resultCacheId = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the result cache id to use to store the result set cache entry.
|
||||||
|
* Will return the configured id if it exists otherwise a hash will be
|
||||||
|
* automatically generated for you.
|
||||||
|
*
|
||||||
|
* @param array $params
|
||||||
|
* @return string $id
|
||||||
|
*/
|
||||||
|
protected function _getResultCacheId(array $params)
|
||||||
|
{
|
||||||
|
if ($this->_resultCacheId) {
|
||||||
|
return $this->_resultCacheId;
|
||||||
|
} else {
|
||||||
|
return md5($this->getDql() . var_export($params, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the given parameters for execution in an SQL statement.
|
* Prepares the given parameters for execution in an SQL statement.
|
||||||
*
|
*
|
||||||
|
@ -19,7 +19,7 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
parent::setUp();
|
parent::setUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testQueryCache()
|
public function testResultCache()
|
||||||
{
|
{
|
||||||
$user = new CmsUser;
|
$user = new CmsUser;
|
||||||
$user->name = 'Roman';
|
$user->name = 'Roman';
|
||||||
@ -55,5 +55,16 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertEquals(1, count($users));
|
$this->assertEquals(1, count($users));
|
||||||
$this->assertEquals('Roman', $users[0]->name);
|
$this->assertEquals('Roman', $users[0]->name);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public function testSetResultCacheId()
|
||||||
|
{
|
||||||
|
$cache = new ArrayCache;
|
||||||
|
|
||||||
|
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
|
||||||
|
$query->setResultCache($cache);
|
||||||
|
$query->setResultCacheId('testing_result_cache_id');
|
||||||
|
$users = $query->getResult();
|
||||||
|
|
||||||
|
$this->assertTrue($cache->contains('testing_result_cache_id'));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user