QueryCacheTest.php 4.05 KB
Newer Older
1 2 3 4 5
<?php

namespace Doctrine\Tests\ORM\Functional;

use Doctrine\Tests\Models\CMS\CmsUser;
6
use Doctrine\Common\Cache\ArrayCache;
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

require_once __DIR__ . '/../../TestInit.php';

/**
 * QueryCacheTest
 *
 * @author robo
 */
class QueryCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
    protected function setUp() {
        $this->useModelSet('cms');
        parent::setUp();
    }

22
    public function testQueryCache_DependsOnHints()
23
    {
24 25 26 27
        $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');

        $cache = new ArrayCache();
        $query->setQueryCacheDriver($cache);
28

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
        $query->getResult();
        $this->assertEquals(1, count($cache->getIds()));

        $query->setHint('foo', 'bar');

        $query->getResult();
        $this->assertEquals(2, count($cache->getIds()));

        return $query;
    }

    /**
     * @param <type> $query
     * @depends testQueryCache_DependsOnHints
     */
    public function testQueryCache_DependsOnFirstResult($query)
    {
        $cache = $query->getQueryCacheDriver();
        $cacheCount = count($cache->getIds());

        $query->setFirstResult(10);
50
        $query->setMaxResults(9999);
51 52 53 54 55 56 57 58 59 60 61 62 63

        $query->getResult();
        $this->assertEquals($cacheCount + 1, count($cache->getIds()));
    }

    /**
     * @param <type> $query
     * @depends testQueryCache_DependsOnHints
     */
    public function testQueryCache_DependsOnMaxResults($query)
    {
        $cache = $query->getQueryCacheDriver();
        $cacheCount = count($cache->getIds());
64

65 66 67 68 69 70
        $query->setMaxResults(10);

        $query->getResult();
        $this->assertEquals($cacheCount + 1, count($cache->getIds()));
    }

71 72 73 74 75 76 77 78 79 80 81 82 83
    /**
     * @param <type> $query
     * @depends testQueryCache_DependsOnHints
     */
    public function testQueryCache_DependsOnHydrationMode($query)
    {
        $cache = $query->getQueryCacheDriver();
        $cacheCount = count($cache->getIds());

        $query->getArrayResult();
        $this->assertEquals($cacheCount + 1, count($cache->getIds()));
    }

84 85
    public function testQueryCache_NoHitSaveParserResult()
    {
86
        $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache());
87 88

        $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
89 90 91 92 93 94 95 96 97 98
        
        $cache = $this->getMock('Doctrine\Common\Cache\AbstractCache', array('_doFetch', '_doContains', '_doSave', '_doDelete', 'getIds'));
        $cache->expects($this->at(0))
              ->method('_doFetch')
              ->with($this->isType('string'))
              ->will($this->returnValue(false));
        $cache->expects($this->at(1))
              ->method('_doSave')
              ->with($this->isType('string'), $this->isInstanceOf('Doctrine\ORM\Query\ParserResult'), $this->equalTo(null));

99
        $query->setQueryCacheDriver($cache);
100

101
        $users = $query->getResult();
102
    }
103

104 105
    public function testQueryCache_HitDoesNotSaveParserResult()
    {
106
        $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache());
107 108

        $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
109

110 111 112 113
        $sqlExecMock = $this->getMock('Doctrine\ORM\Query\Exec\AbstractSqlExecutor', array('execute'));
        $sqlExecMock->expects($this->once())
                    ->method('execute')
                    ->will($this->returnValue( 10 ));
114

115 116 117 118
        $parserResultMock = $this->getMock('Doctrine\ORM\Query\ParserResult');
        $parserResultMock->expects($this->once())
                         ->method('getSqlExecutor')
                         ->will($this->returnValue($sqlExecMock));
119

120 121 122 123 124 125 126
        $cache = $this->getMock('Doctrine\Common\Cache\AbstractCache', array('_doFetch', '_doContains', '_doSave', '_doDelete', 'getIds'));
        $cache->expects($this->once())
              ->method('_doFetch')
              ->with($this->isType('string'))
              ->will($this->returnValue($parserResultMock));
        $cache->expects($this->never())
              ->method('_doSave');
127

128 129 130
        $query->setQueryCacheDriver($cache);

        $users = $query->getResult();
131 132 133
    }
}