Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / ResultCacheTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional;
4
5 use Doctrine\Tests\Models\CMS\CmsUser;
6 use Doctrine\Tests\Models\CMS\CmsArticle;
7 use Doctrine\Common\Cache\ArrayCache;
8
9 require_once __DIR__ . '/../../TestInit.php';
10
11 /**
12  * ResultCacheTest
13  *
14  * @author robo
15  */
16 class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
17 {
18    /**
19      * @var \ReflectionProperty
20      */
21     private $cacheDataReflection;
22
23     protected function setUp() {
24         $this->cacheDataReflection = new \ReflectionProperty("Doctrine\Common\Cache\ArrayCache", "data");
25         $this->cacheDataReflection->setAccessible(true);
26         $this->useModelSet('cms');
27         parent::setUp();
28     }
29
30     /**
31      * @param   ArrayCache $cache
32      * @return  integer
33      */
34     private function getCacheSize(ArrayCache $cache)
35     {
36         return sizeof($this->cacheDataReflection->getValue($cache));
37     }
38
39     public function testResultCache()
40     {
41         $user = new CmsUser;
42         $user->name = 'Roman';
43         $user->username = 'romanb';
44         $user->status = 'dev';
45         $this->_em->persist($user);
46         $this->_em->flush();
47
48
49         $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
50
51         $cache = new ArrayCache();
52
53         $query->setResultCacheDriver($cache)->setResultCacheId('my_cache_id');
54
55         $this->assertFalse($cache->contains('my_cache_id'));
56
57         $users = $query->getResult();
58
59         $this->assertTrue($cache->contains('my_cache_id'));
60         $this->assertEquals(1, count($users));
61         $this->assertEquals('Roman', $users[0]->name);
62
63         $this->_em->clear();
64
65         $query2 = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
66         $query2->setResultCacheDriver($cache)->setResultCacheId('my_cache_id');
67
68         $users = $query2->getResult();
69
70         $this->assertTrue($cache->contains('my_cache_id'));
71         $this->assertEquals(1, count($users));
72         $this->assertEquals('Roman', $users[0]->name);
73     }
74
75     public function testSetResultCacheId()
76     {
77         $cache = new ArrayCache;
78
79         $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
80         $query->setResultCacheDriver($cache);
81         $query->setResultCacheId('testing_result_cache_id');
82
83         $this->assertFalse($cache->contains('testing_result_cache_id'));
84
85         $users = $query->getResult();
86
87         $this->assertTrue($cache->contains('testing_result_cache_id'));
88     }
89
90     public function testUseResultCache()
91     {
92         $cache = new \Doctrine\Common\Cache\ArrayCache();
93
94         $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
95         $query->useResultCache(true);
96         $query->setResultCacheDriver($cache);
97         $query->setResultCacheId('testing_result_cache_id');
98         $users = $query->getResult();
99
100         $this->assertTrue($cache->contains('testing_result_cache_id'));
101
102         $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache());
103     }
104
105     /**
106      * @group DDC-1026
107      */
108     public function testUseResultCacheParams()
109     {
110         $cache = new \Doctrine\Common\Cache\ArrayCache();
111
112         $sqlCount = count($this->_sqlLoggerStack->queries);
113         $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux WHERE ux.id = ?1');
114         $query->setParameter(1, 1);
115         $query->setResultCacheDriver($cache);
116         $query->useResultCache(true);
117         $query->getResult();
118
119         $query->setParameter(1, 2);
120         $query->getResult();
121
122         $this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "Two non-cached queries.");
123
124         $query->setParameter(1, 1);
125         $query->useResultCache(true);
126         $query->getResult();
127
128         $query->setParameter(1, 2);
129         $query->getResult();
130
131         $this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "The next two sql should have been cached, but were not.");
132     }
133
134     public function testNativeQueryResultCaching()
135     {
136         $rsm = new \Doctrine\ORM\Query\ResultSetMapping();
137         $rsm->addScalarResult('id', 'u');
138         $query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm);
139         $query->setParameter(1, 10);
140
141         $cache = new ArrayCache();
142         $query->setResultCacheDriver($cache)->useResultCache(true);
143
144         $this->assertEquals(0, $this->getCacheSize($cache));
145         $query->getResult();
146         $this->assertEquals(2, $this->getCacheSize($cache));
147
148         return $query;
149     }
150
151     /**
152      * @param string $query
153      * @depends testNativeQueryResultCaching
154      */
155     public function testResultCacheNotDependsOnQueryHints($query)
156     {
157         $cache = $query->getResultCacheDriver();
158         $cacheCount = $this->getCacheSize($cache);
159
160         $query->setHint('foo', 'bar');
161         $query->getResult();
162
163         $this->assertEquals($cacheCount, $this->getCacheSize($cache));
164     }
165
166     /**
167      * @param <type> $query
168      * @depends testNativeQueryResultCaching
169      */
170     public function testResultCacheDependsOnParameters($query)
171     {
172         $cache = $query->getResultCacheDriver();
173         $cacheCount = $this->getCacheSize($cache);
174
175         $query->setParameter(1, 50);
176         $query->getResult();
177
178         $this->assertEquals($cacheCount + 1, $this->getCacheSize($cache));
179     }
180
181     /**
182      * @param <type> $query
183      * @depends testNativeQueryResultCaching
184      */
185     public function testResultCacheNotDependsOnHydrationMode($query)
186     {
187         $cache = $query->getResultCacheDriver();
188         $cacheCount = $this->getCacheSize($cache);
189
190         $this->assertNotEquals(\Doctrine\ORM\Query::HYDRATE_ARRAY, $query->getHydrationMode());
191         $query->getArrayResult();
192
193         $this->assertEquals($cacheCount, $this->getCacheSize($cache));
194     }
195
196     /**
197      * @group DDC-909
198      */
199     public function testResultCacheWithObjectParameter()
200     {
201         $user1 = new CmsUser;
202         $user1->name = 'Roman';
203         $user1->username = 'romanb';
204         $user1->status = 'dev';
205
206         $user2 = new CmsUser;
207         $user2->name = 'Benjamin';
208         $user2->username = 'beberlei';
209         $user2->status = 'dev';
210
211         $article = new CmsArticle();
212         $article->text = "foo";
213         $article->topic = "baz";
214         $article->user = $user1;
215
216         $this->_em->persist($article);
217         $this->_em->persist($user1);
218         $this->_em->persist($user2);
219         $this->_em->flush();
220
221         $query = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1');
222         $query->setParameter(1, $user1);
223
224         $cache = new ArrayCache();
225
226         $query->setResultCacheDriver($cache)->useResultCache(true);
227
228         $articles = $query->getResult();
229
230         $this->assertEquals(1, count($articles));
231         $this->assertEquals('baz', $articles[0]->topic);
232
233         $this->_em->clear();
234
235         $query2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1');
236         $query2->setParameter(1, $user1);
237
238         $query2->setResultCacheDriver($cache)->useResultCache(true);
239
240         $articles = $query2->getResult();
241
242         $this->assertEquals(1, count($articles));
243         $this->assertEquals('baz', $articles[0]->topic);
244
245         $query3 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1');
246         $query3->setParameter(1, $user2);
247
248         $query3->setResultCacheDriver($cache)->useResultCache(true);
249
250         $articles = $query3->getResult();
251
252         $this->assertEquals(0, count($articles));
253     }
254 }