/**
  * {@inheritdoc}
  */
 public function loadCriteria(Criteria $criteria)
 {
     $query = $this->persister->getSelectSQL($criteria);
     $timestamp = $this->timestampRegion->get($this->timestampKey);
     $hash = $this->getHash($query, $criteria, null, null, null, $timestamp ? $timestamp->time : null);
     $rsm = $this->getResultSetMapping();
     $querykey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL);
     $queryCache = $this->cache->getQueryCache($this->regionName);
     $cacheResult = $queryCache->get($querykey, $rsm);
     if ($cacheResult !== null) {
         if ($this->cacheLogger) {
             $this->cacheLogger->queryCacheHit($this->regionName, $querykey);
         }
         return $cacheResult;
     }
     $result = $this->persister->loadCriteria($criteria);
     $cached = $queryCache->put($querykey, $rsm, $result);
     if ($this->cacheLogger) {
         if ($result) {
             $this->cacheLogger->queryCacheMiss($this->regionName, $querykey);
         }
         if ($cached) {
             $this->cacheLogger->queryCachePut($this->regionName, $querykey);
         }
     }
     return $result;
 }
 /**
  * {@inheritdoc}
  */
 public function loadCriteria(Criteria $criteria)
 {
     $orderBy = $criteria->getOrderings();
     $limit = $criteria->getMaxResults();
     $offset = $criteria->getFirstResult();
     $query = $this->persister->getSelectSQL($criteria);
     $hash = $this->getHash($query, $criteria, $orderBy, $limit, $offset);
     $rsm = $this->getResultSetMapping();
     $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey);
     $queryCache = $this->cache->getQueryCache($this->regionName);
     $cacheResult = $queryCache->get($queryKey, $rsm);
     if ($cacheResult !== null) {
         if ($this->cacheLogger) {
             $this->cacheLogger->queryCacheHit($this->regionName, $queryKey);
         }
         return $cacheResult;
     }
     $result = $this->persister->loadCriteria($criteria);
     $cached = $queryCache->put($queryKey, $rsm, $result);
     if ($this->cacheLogger) {
         if ($result) {
             $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey);
         }
         if ($cached) {
             $this->cacheLogger->queryCachePut($this->regionName, $queryKey);
         }
     }
     return $result;
 }
 public function testQueryCache()
 {
     $this->assertFalse($this->cache->containsQuery('foo'));
     $defaultQueryCache = $this->cache->getQueryCache();
     $fooQueryCache = $this->cache->getQueryCache('foo');
     $this->assertInstanceOf('Doctrine\\ORM\\Cache\\QueryCache', $defaultQueryCache);
     $this->assertInstanceOf('Doctrine\\ORM\\Cache\\QueryCache', $fooQueryCache);
     $this->assertSame($defaultQueryCache, $this->cache->getQueryCache());
     $this->assertSame($fooQueryCache, $this->cache->getQueryCache('foo'));
     $this->cache->evictQueryRegion();
     $this->cache->evictQueryRegion('foo');
     $this->cache->evictQueryRegions();
     $this->assertTrue($this->cache->containsQuery('foo'));
     $this->assertSame($defaultQueryCache, $this->cache->getQueryCache());
     $this->assertSame($fooQueryCache, $this->cache->getQueryCache('foo'));
 }
 protected function evictRegions()
 {
     $this->cache->evictQueryRegions();
     $this->cache->evictEntityRegions();
     $this->cache->evictCollectionRegions();
 }