Merge pull request #950 from goetas/patch-1
[SLC] Cache empty collections
This commit is contained in:
commit
a3b4104612
@ -508,7 +508,7 @@ abstract class AbstractEntityPersister implements CachedEntityPersister
|
||||
|
||||
$list = $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $coll);
|
||||
|
||||
if ($hasCache && ! empty($list)) {
|
||||
if ($hasCache) {
|
||||
$persister->storeCollectionCache($key, $list);
|
||||
|
||||
if ($this->cacheLogger) {
|
||||
@ -543,7 +543,7 @@ abstract class AbstractEntityPersister implements CachedEntityPersister
|
||||
|
||||
$list = $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $coll);
|
||||
|
||||
if ($hasCache && ! empty($list)) {
|
||||
if ($hasCache) {
|
||||
$persister->storeCollectionCache($key, $list);
|
||||
|
||||
if ($this->cacheLogger) {
|
||||
|
@ -121,7 +121,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
||||
|
||||
protected function loadFixturesTravelersWithProfile()
|
||||
{
|
||||
$t1 = new Traveler("Test traveler 1");
|
||||
@ -139,7 +139,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->travelersWithProfile[] = $t1;
|
||||
$this->travelersWithProfile[] = $t2;
|
||||
|
||||
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
||||
@ -165,6 +165,7 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase
|
||||
{
|
||||
$t1 = new Travel($this->travelers[0]);
|
||||
$t2 = new Travel($this->travelers[1]);
|
||||
$t3 = new Travel($this->travelers[1]);
|
||||
|
||||
$t1->addVisitedCity($this->cities[0]);
|
||||
$t1->addVisitedCity($this->cities[1]);
|
||||
@ -175,9 +176,11 @@ abstract class SecondLevelCacheAbstractTest extends OrmFunctionalTestCase
|
||||
|
||||
$this->_em->persist($t1);
|
||||
$this->_em->persist($t2);
|
||||
$this->_em->persist($t3);
|
||||
|
||||
$this->travels[] = $t1;
|
||||
$this->travels[] = $t2;
|
||||
$this->travels[] = $t3;
|
||||
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
@ -171,7 +171,7 @@ class SecondLevelCacheManyToManyTest extends SecondLevelCacheAbstractTest
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->assertTrue($this->cache->containsEntity(Traveler::CLASSNAME, $travel->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(Travel::CLASSNAME, $travel->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(Traveler::CLASSNAME, $traveler->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->cities[0]->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->cities[1]->getId()));
|
||||
@ -214,4 +214,33 @@ class SecondLevelCacheManyToManyTest extends SecondLevelCacheAbstractTest
|
||||
$this->_em->persist($travel);
|
||||
$this->_em->flush();
|
||||
}
|
||||
|
||||
public function testManyToManyWithEmptyRelation()
|
||||
{
|
||||
$this->loadFixturesCountries();
|
||||
$this->loadFixturesStates();
|
||||
$this->loadFixturesCities();
|
||||
$this->loadFixturesTraveler();
|
||||
$this->loadFixturesTravels();
|
||||
$this->_em->clear();
|
||||
|
||||
$this->evictRegions();
|
||||
|
||||
$queryCount = $this->getCurrentQueryCount();
|
||||
|
||||
$entitiId = $this->travels[2]->getId(); //empty travel
|
||||
$entity = $this->_em->find(Travel::CLASSNAME, $entitiId);
|
||||
|
||||
$this->assertEquals(0, $entity->getVisitedCities()->count());
|
||||
$this->assertEquals($queryCount+2, $this->getCurrentQueryCount());
|
||||
|
||||
$this->_em->clear();
|
||||
|
||||
$entity = $this->_em->find(Travel::CLASSNAME, $entitiId);
|
||||
|
||||
$queryCount = $this->getCurrentQueryCount();
|
||||
$this->assertEquals(0, $entity->getVisitedCities()->count());
|
||||
$this->assertEquals($queryCount, $this->getCurrentQueryCount());
|
||||
|
||||
}
|
||||
}
|
@ -90,7 +90,7 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest
|
||||
|
||||
$s3 = $this->_em->find(State::CLASSNAME, $this->states[0]->getId());
|
||||
$s4 = $this->_em->find(State::CLASSNAME, $this->states[1]->getId());
|
||||
|
||||
|
||||
//trigger lazy load from cache
|
||||
$this->assertCount(2, $s3->getCities());
|
||||
$this->assertCount(2, $s4->getCities());
|
||||
@ -133,12 +133,12 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest
|
||||
|
||||
//trigger lazy load from database
|
||||
$this->assertCount(2, $this->_em->find(State::CLASSNAME, $this->states[0]->getId())->getCities());
|
||||
|
||||
|
||||
$this->assertTrue($this->cache->containsEntity(State::CLASSNAME, $this->states[0]->getId()));
|
||||
$this->assertTrue($this->cache->containsCollection(State::CLASSNAME, 'cities', $this->states[0]->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->states[0]->getCities()->get(0)->getId()));
|
||||
$this->assertTrue($this->cache->containsEntity(City::CLASSNAME, $this->states[0]->getCities()->get(1)->getId()));
|
||||
|
||||
|
||||
$queryCount = $this->getCurrentQueryCount();
|
||||
$stateId = $this->states[0]->getId();
|
||||
$state = $this->_em->find(State::CLASSNAME, $stateId);
|
||||
@ -284,6 +284,35 @@ class SecondLevelCacheOneToManyTest extends SecondLevelCacheAbstractTest
|
||||
$this->assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::CLASSNAME, 'cities')));
|
||||
}
|
||||
|
||||
public function testOneToManyWithEmptyRelation()
|
||||
{
|
||||
$this->loadFixturesCountries();
|
||||
$this->loadFixturesStates();
|
||||
$this->loadFixturesCities();
|
||||
|
||||
$this->secondLevelCacheLogger->clearStats();
|
||||
$this->cache->evictEntityRegion(City::CLASSNAME);
|
||||
$this->cache->evictEntityRegion(State::CLASSNAME);
|
||||
$this->cache->evictCollectionRegion(State::CLASSNAME, 'cities');
|
||||
$this->_em->clear();
|
||||
|
||||
$entitiId = $this->states[2]->getId(); // bavaria (cities count = 0)
|
||||
$queryCount = $this->getCurrentQueryCount();
|
||||
$entity = $this->_em->find(State::CLASSNAME, $entitiId);
|
||||
|
||||
$this->assertEquals(0, $entity->getCities()->count());
|
||||
$this->assertEquals($queryCount + 2, $this->getCurrentQueryCount());
|
||||
|
||||
$this->_em->clear();
|
||||
|
||||
$queryCount = $this->getCurrentQueryCount();
|
||||
$entity = $this->_em->find(State::CLASSNAME, $entitiId);
|
||||
|
||||
$this->assertEquals(0, $entity->getCities()->count());
|
||||
$this->assertEquals($queryCount, $this->getCurrentQueryCount());
|
||||
|
||||
}
|
||||
|
||||
public function testOneToManyCount()
|
||||
{
|
||||
$this->loadFixturesCountries();
|
||||
|
Loading…
x
Reference in New Issue
Block a user