QueryCacheTest.php 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional;
  3. use Doctrine\Tests\Models\CMS\CmsUser;
  4. use Doctrine\Common\Cache\ArrayCache;
  5. require_once __DIR__ . '/../../TestInit.php';
  6. /**
  7. * QueryCacheTest
  8. *
  9. * @author robo
  10. */
  11. class QueryCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
  12. {
  13. protected function setUp() {
  14. $this->useModelSet('cms');
  15. parent::setUp();
  16. }
  17. public function testQueryCache_DependsOnHints()
  18. {
  19. $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
  20. $cache = new ArrayCache();
  21. $query->setQueryCacheDriver($cache);
  22. $query->getResult();
  23. $this->assertEquals(1, count($cache->getIds()));
  24. $query->setHint('foo', 'bar');
  25. $query->getResult();
  26. $this->assertEquals(2, count($cache->getIds()));
  27. return $query;
  28. }
  29. /**
  30. * @param <type> $query
  31. * @depends testQueryCache_DependsOnHints
  32. */
  33. public function testQueryCache_DependsOnFirstResult($query)
  34. {
  35. $cache = $query->getQueryCacheDriver();
  36. $cacheCount = count($cache->getIds());
  37. $query->setFirstResult(10);
  38. $query->setMaxResults(9999);
  39. $query->getResult();
  40. $this->assertEquals($cacheCount + 1, count($cache->getIds()));
  41. }
  42. /**
  43. * @param <type> $query
  44. * @depends testQueryCache_DependsOnHints
  45. */
  46. public function testQueryCache_DependsOnMaxResults($query)
  47. {
  48. $cache = $query->getQueryCacheDriver();
  49. $cacheCount = count($cache->getIds());
  50. $query->setMaxResults(10);
  51. $query->getResult();
  52. $this->assertEquals($cacheCount + 1, count($cache->getIds()));
  53. }
  54. /**
  55. * @param <type> $query
  56. * @depends testQueryCache_DependsOnHints
  57. */
  58. public function testQueryCache_DependsOnHydrationMode($query)
  59. {
  60. $cache = $query->getQueryCacheDriver();
  61. $cacheCount = count($cache->getIds());
  62. $query->getArrayResult();
  63. $this->assertEquals($cacheCount + 1, count($cache->getIds()));
  64. }
  65. public function testQueryCache_NoHitSaveParserResult()
  66. {
  67. $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache());
  68. $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
  69. $cache = $this->getMock('Doctrine\Common\Cache\AbstractCache', array('_doFetch', '_doContains', '_doSave', '_doDelete', 'getIds'));
  70. $cache->expects($this->at(0))
  71. ->method('_doFetch')
  72. ->with($this->isType('string'))
  73. ->will($this->returnValue(false));
  74. $cache->expects($this->at(1))
  75. ->method('_doSave')
  76. ->with($this->isType('string'), $this->isInstanceOf('Doctrine\ORM\Query\ParserResult'), $this->equalTo(null));
  77. $query->setQueryCacheDriver($cache);
  78. $users = $query->getResult();
  79. }
  80. public function testQueryCache_HitDoesNotSaveParserResult()
  81. {
  82. $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache());
  83. $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
  84. $sqlExecMock = $this->getMock('Doctrine\ORM\Query\Exec\AbstractSqlExecutor', array('execute'));
  85. $sqlExecMock->expects($this->once())
  86. ->method('execute')
  87. ->will($this->returnValue( 10 ));
  88. $parserResultMock = $this->getMock('Doctrine\ORM\Query\ParserResult');
  89. $parserResultMock->expects($this->once())
  90. ->method('getSqlExecutor')
  91. ->will($this->returnValue($sqlExecMock));
  92. $cache = $this->getMock('Doctrine\Common\Cache\AbstractCache', array('_doFetch', '_doContains', '_doSave', '_doDelete', 'getIds'));
  93. $cache->expects($this->once())
  94. ->method('_doFetch')
  95. ->with($this->isType('string'))
  96. ->will($this->returnValue($parserResultMock));
  97. $cache->expects($this->never())
  98. ->method('_doSave');
  99. $query->setQueryCacheDriver($cache);
  100. $users = $query->getResult();
  101. }
  102. }