Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[DDC-1766] Rewrite getHydrationCacheId() to use existing processParam…

…eterValue() method. Other code style changes.
  • Loading branch information...
commit 0b3577f2d2551f720f4cd0b80fcc9c1722e04986 1 parent 1095fb3
@beberlei beberlei authored
View
29 lib/Doctrine/ORM/AbstractQuery.php
@@ -20,8 +20,8 @@
namespace Doctrine\ORM;
use Doctrine\DBAL\Types\Type,
- Doctrine\ORM\Query\QueryException,
Doctrine\DBAL\Cache\QueryCacheProfile,
+ Doctrine\ORM\Query\QueryException,
Doctrine\ORM\Internal\Hydration\CacheHydrator;
/**
@@ -30,7 +30,6 @@
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @link www.doctrine-project.org
* @since 2.0
- * @version $Revision$
* @author Benjamin Eberlei <kontakt@beberlei.de>
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
* @author Jonathan Wage <jonwage@gmail.com>
@@ -329,7 +328,7 @@ public function setResultSetMapping(Query\ResultSetMapping $rsm)
public function setHydrationCacheProfile(QueryCacheProfile $profile = null)
{
if ( ! $profile->getResultCacheDriver()) {
- $resultCacheDriver = $this->_em->getConfiguration()->getResultCacheImpl();
+ $resultCacheDriver = $this->_em->getConfiguration()->getHydrationCacheImpl();
$profile = $profile->setResultCacheDriver($resultCacheDriver);
}
@@ -717,9 +716,9 @@ public function execute($params = array(), $hydrationMode = null)
if ($this->_hydrationCacheProfile !== null) {
list($cacheKey, $realCacheKey) = $this->getHydrationCacheId();
- $qcp = $this->getHydrationCacheProfile();
- $cache = $qcp->getResultCacheDriver();
- $result = $cache->fetch($cacheKey);
+ $queryCacheProfile = $this->getHydrationCacheProfile();
+ $cache = $queryCacheProfile->getResultCacheDriver();
+ $result = $cache->fetch($cacheKey);
if (isset($result[$realCacheKey])) {
return $result[$realCacheKey];
@@ -729,9 +728,9 @@ public function execute($params = array(), $hydrationMode = null)
$result = array();
}
- $setCacheEntry = function($data) use ($cache, $result, $cacheKey, $realCacheKey, $qcp) {
+ $setCacheEntry = function($data) use ($cache, $result, $cacheKey, $realCacheKey, $queryCacheProfile) {
$result[$realCacheKey] = $data;
- $cache->save($cacheKey, $result, $qcp->getLifetime());
+ $cache->save($cacheKey, $result, $queryCacheProfile->getLifetime());
};
}
@@ -764,24 +763,16 @@ protected function getHydrationCacheId()
$params = $this->getParameters();
foreach ($params AS $key => $value) {
- if (is_object($value) && $this->_em->getMetadataFactory()->hasMetadataFor(get_class($value))) {
- if ($this->_em->getUnitOfWork()->getEntityState($value) == UnitOfWork::STATE_MANAGED) {
- $idValues = $this->_em->getUnitOfWork()->getEntityIdentifier($value);
- } else {
- $class = $this->_em->getClassMetadata(get_class($value));
- $idValues = $class->getIdentifierValues($value);
- }
- $params[$key] = $idValues;
- }
+ $params[$key] = $this->processParameterValue($value);
}
$sql = $this->getSQL();
+ $queryCacheProfile = $this->getHydrationCacheProfile();
$hints = $this->getHints();
$hints['hydrationMode'] = $this->getHydrationMode();
- $qcp = $this->getHydrationCacheProfile();
ksort($hints);
- return $qcp->generateCacheKeys($sql, $params, $hints);
+ return $queryCacheProfile->generateCacheKeys($sql, $params, $hints);
}
/**
View
22 lib/Doctrine/ORM/Configuration.php
@@ -247,6 +247,28 @@ public function setQueryCacheImpl(Cache $cacheImpl)
}
/**
+ * Gets the cache driver implementation that is used for the hydration cache (SQL cache).
+ *
+ * @return \Doctrine\Common\Cache\Cache
+ */
+ public function getHydrationCacheImpl()
+ {
+ return isset($this->_attributes['hydrationCacheImpl'])
+ ? $this->_attributes['hydrationCacheImpl']
+ : null;
+ }
+
+ /**
+ * Sets the cache driver implementation that is used for the hydration cache (SQL cache).
+ *
+ * @param \Doctrine\Common\Cache\Cache $cacheImpl
+ */
+ public function setHydrationCacheImpl(Cache $cacheImpl)
+ {
+ $this->_attributes['hydrationCacheImpl'] = $cacheImpl;
+ }
+
+ /**
* Gets the cache driver implementation that is used for metadata caching.
*
* @return \Doctrine\Common\Cache\Cache
View
26 tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php
@@ -15,11 +15,6 @@ public function setUp()
{
$this->useModelSet('cms');
parent::setUp();
- }
-
- public function testHydrationCache()
- {
- $cache = new ArrayCache();
$user = new CmsUser;
$user->name = "Benjamin";
@@ -29,8 +24,11 @@ public function testHydrationCache()
$this->_em->persist($user);
$this->_em->flush();
$this->_em->clear();
+ }
-
+ public function testHydrationCache()
+ {
+ $cache = new ArrayCache();
$dql = "SELECT u FROM Doctrine\Tests\Models\Cms\CmsUser u";
$users = $this->_em->createQuery($dql)
@@ -66,7 +64,23 @@ public function testHydrationCache()
->setHydrationCacheProfile(new QueryCacheProfile(null, 'cachekey', $cache))
->getArrayResult();
$this->assertEquals($c + 2, $this->getCurrentQueryCount(), "Hydration now cached");
+ }
+
+ public function testHydrationParametersSerialization()
+ {
+ $cache = new ArrayCache();
+ $user = new CmsUser();
+ $user->id = 1;
+
+ $dql = "SELECT u FROM Doctrine\Tests\Models\Cms\CmsUser u WHERE u.id = ?1";
+ $query = $this->_em->createQuery($dql)
+ ->setParameter(1, $user)
+ ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache));
+ $query->getResult();
+ $c = $this->getCurrentQueryCount();
+ $query->getResult();
+ $this->assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!");
}
}
Please sign in to comment.
Something went wrong with that request. Please try again.