From be0088f00cf14b96b7cf35abd11cbdf59fe84ec1 Mon Sep 17 00:00:00 2001 From: romanb Date: Tue, 21 Jul 2009 10:48:19 +0000 Subject: [PATCH] [2.0] Fix and test for result cache. --- lib/Doctrine/ORM/AbstractQuery.php | 9 ++- .../Tests/ORM/Functional/AllTests.php | 1 + .../Tests/ORM/Functional/ResultCacheTest.php | 59 +++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index f3d1133e8..95c383051 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -443,7 +443,12 @@ abstract class AbstractQuery if ($cached === false) { // Cache miss. - $result = $this->_doExecute($params); + $stmt = $this->_doExecute($params); + + $result = $this->_em->getHydrator($this->_hydrationMode)->hydrateAll( + $stmt, $this->_resultSetMapping, $this->_hints + ); + $cacheDriver->save($hash, serialize($result), $this->_resultCacheTTL); return $result; @@ -467,7 +472,7 @@ abstract class AbstractQuery /** * Prepares the given parameters for execution in an SQL statement. * - * Note to inheritors: This method must return a numerically, continously indexed array, + * Note to inheritors: This method must return a numerically, continuously indexed array, * starting with index 0 where the values (the parameter values) are in the order * in which the parameters appear in the SQL query. * diff --git a/tests/Doctrine/Tests/ORM/Functional/AllTests.php b/tests/Doctrine/Tests/ORM/Functional/AllTests.php index 20db30dd2..6730e9356 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AllTests.php +++ b/tests/Doctrine/Tests/ORM/Functional/AllTests.php @@ -25,6 +25,7 @@ class AllTests $suite->addTestSuite('Doctrine\Tests\ORM\Functional\ClassTableInheritanceTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\DetachedEntityTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\QueryCacheTest'); + $suite->addTestSuite('Doctrine\Tests\ORM\Functional\ResultCacheTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\QueryTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\OneToOneUnidirectionalAssociationTest'); $suite->addTestSuite('Doctrine\Tests\ORM\Functional\OneToOneBidirectionalAssociationTest'); diff --git a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php new file mode 100644 index 000000000..9123a7bd0 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php @@ -0,0 +1,59 @@ +useModelSet('cms'); + parent::setUp(); + } + + public function testQueryCache() + { + $user = new CmsUser; + $user->name = 'Roman'; + $user->username = 'romanb'; + $user->status = 'dev'; + $this->_em->persist($user); + $this->_em->flush(); + + + $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $cache = new ArrayCache; + $query->setResultCache($cache); + $this->assertEquals(0, $cache->count()); + + $initialQueryCount = $this->_em->getConnection()->getQueryCount(); + + $users = $query->getResultList(); + + $this->assertEquals($initialQueryCount + 1, $this->_em->getConnection()->getQueryCount()); + $this->assertEquals(1, $cache->count()); + $this->assertEquals(1, count($users)); + $this->assertEquals('Roman', $users[0]->name); + + $this->_em->clear(); + + $query2 = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query2->setResultCache($cache); + + $users = $query2->getResultList(); + + $this->assertEquals($initialQueryCount + 1, $this->_em->getConnection()->getQueryCount()); + $this->assertEquals(1, $cache->count()); + $this->assertEquals(1, count($users)); + $this->assertEquals('Roman', $users[0]->name); + } +} +