Skip to content

Commit

Permalink
Make child entity share the timestamp region with parent class
Browse files Browse the repository at this point in the history
  • Loading branch information
lcobucci committed Nov 20, 2016
1 parent 95d9c64 commit 317e868
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/AbstractQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,7 @@ private function getTimestampKey()

$metadata = $this->_em->getClassMetadata($entityName);

return new Cache\TimestampCacheKey($metadata->getTableName());
return new Cache\TimestampCacheKey($metadata->rootEntityName);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ public function __construct(EntityPersister $persister, Region $region, EntityMa
$this->cacheLogger = $cacheConfig->getCacheLogger();
$this->timestampRegion = $cacheFactory->getTimestampRegion();
$this->hydrator = $cacheFactory->buildEntityHydrator($em, $class);
$this->timestampKey = new TimestampCacheKey($this->class->getTableName());
$this->timestampKey = new TimestampCacheKey($this->class->rootEntityName);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
namespace Doctrine\Tests\ORM\Functional;

use Doctrine\Tests\Models\Cache\Attraction;
use Doctrine\Tests\Models\Cache\AttractionInfo;
use Doctrine\Tests\Models\Cache\AttractionContactInfo;
use Doctrine\Tests\Models\Cache\AttractionInfo;
use Doctrine\Tests\Models\Cache\AttractionLocationInfo;

/**
Expand Down Expand Up @@ -188,4 +188,47 @@ public function testOneToManyRelationJoinTable()
$this->assertInstanceOf(AttractionContactInfo::CLASSNAME, $entity->getInfos()->get(0));
$this->assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone());
}
}

public function testQueryCacheShouldBeEvictedOnTimestampUpdate()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->loadFixturesAttractionsInfo();
$this->evictRegions();
$this->_em->clear();

$queryCount = $this->getCurrentQueryCount();
$dql = 'SELECT attractionInfo FROM Doctrine\Tests\Models\Cache\AttractionInfo attractionInfo';

$result1 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();

$this->assertCount(count($this->attractionsInfo), $result1);
$this->assertEquals($queryCount + 5, $this->getCurrentQueryCount());

$contact = new AttractionContactInfo(
'1234-1234',
$this->_em->find(Attraction::class, $this->attractions[5]->getId())
);

$this->_em->persist($contact);
$this->_em->flush();
$this->_em->clear();

$queryCount = $this->getCurrentQueryCount();

$result2 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();

$this->assertCount(count($this->attractionsInfo) + 1, $result2);
$this->assertEquals($queryCount + 6, $this->getCurrentQueryCount());

foreach ($result2 as $entity) {
$this->assertInstanceOf(AttractionInfo::CLASSNAME, $entity);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,45 @@ public function testOneToManyRelationSingleTable()
$this->assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName());
$this->assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName());
}
}

public function testQueryCacheShouldBeEvictedOnTimestampUpdate()
{
$this->loadFixturesCountries();
$this->loadFixturesStates();
$this->loadFixturesCities();
$this->loadFixturesAttractions();
$this->_em->clear();

$queryCount = $this->getCurrentQueryCount();
$dql = 'SELECT attraction FROM Doctrine\Tests\Models\Cache\Attraction attraction';

$result1 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();

$this->assertCount(count($this->attractions), $result1);
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());

$contact = new Beach(
'Botafogo',
$this->_em->find(City::class, $this->cities[1]->getId())
);

$this->_em->persist($contact);
$this->_em->flush();
$this->_em->clear();

$queryCount = $this->getCurrentQueryCount();

$result2 = $this->_em->createQuery($dql)
->setCacheable(true)
->getResult();

$this->assertCount(count($this->attractions) + 1, $result2);
$this->assertEquals($queryCount + 1, $this->getCurrentQueryCount());

foreach ($result2 as $entity) {
$this->assertInstanceOf(Attraction::CLASSNAME, $entity);
}
}
}

0 comments on commit 317e868

Please sign in to comment.