Skip to content

Commit

Permalink
Avoid reusing variable name
Browse files Browse the repository at this point in the history
The same variable name is used below, and that causes a bug etc.
Fixes #7735
  • Loading branch information
A.Kuterev authored and lcobucci committed Aug 11, 2019
1 parent 7e26d82 commit 5234ca2
Show file tree
Hide file tree
Showing 2 changed files with 183 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -452,12 +452,14 @@ public function loadById(array $identifier, $entity = null)
$class = $this->metadataFactory->getMetadataFor($cacheEntry->class);
}

if (($entity = $this->hydrator->loadCacheEntry($class, $cacheKey, $cacheEntry, $entity)) !== null) {
$cachedEntity = $this->hydrator->loadCacheEntry($class, $cacheKey, $cacheEntry, $entity);

if ($cachedEntity !== null) {
if ($this->cacheLogger) {
$this->cacheLogger->entityCacheHit($this->regionName, $cacheKey);
}

return $entity;
return $cachedEntity;
}
}

Expand Down
179 changes: 179 additions & 0 deletions tests/Doctrine/Tests/ORM/Functional/Ticket/IssueGH7735Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\ORM\Functional\Ticket;

use Doctrine\ORM\Mapping\Cache;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToOne;
use Doctrine\Tests\OrmFunctionalTestCase;
use function assert;

final class IssueGH7735Test extends OrmFunctionalTestCase
{
public function setUp() : void
{
$this->enableSecondLevelCache();
parent::setUp();

$this->_schemaTool->createSchema(
[
$this->_em->getClassMetadata(IssueGH7735Car::class),
$this->_em->getClassMetadata(IssueGH7735Power::class),
$this->_em->getClassMetadata(IssueGH7735Engine::class),
]
);

$this->_em->persist(new IssueGH7735Car(1, new IssueGH7735Engine(1, 'turbo', new IssueGH7735Power(1))));
$this->_em->flush();
$this->_em->clear();
}

/**
* @test
* @group GH7735
*/
public function findByReturnsCachedEntity() : void
{
$this->_em->getCache()->evictEntityRegion(IssueGH7735Power::class);

$car = $this->_em->find(IssueGH7735Car::class, 1);
assert($car instanceof IssueGH7735Car);

self::assertSame('turbo', $car->getEngine()->getModel());
self::assertSame(1, $car->getEngine()->getPower()->getId());
}
}

/**
* @Entity @Cache(usage="READ_ONLY")
*/
class IssueGH7735Car
{
/**
* @Id
* @Column(type="integer")
* @var int
*/
private $id;

/**
* @ManyToOne(targetEntity=IssueGH7735Engine::class, cascade={"all"})
* @JoinColumn(nullable=false)
* @Cache("READ_ONLY")
* @var IssueGH7735Engine
*/
private $engine;

public function __construct(int $id, IssueGH7735Engine $engine)
{
$this->id = $id;
$this->engine = $engine;
}

public function getId() : int
{
return $this->id;
}

public function getEngine() : IssueGH7735Engine
{
return $this->engine;
}
}

/**
* @Entity
* @Cache(usage="READ_ONLY")
*/
class IssueGH7735Engine
{
/**
* @Id
* @Column(type="integer")
* @var int
*/
private $id;

/**
* @OneToOne(targetEntity=IssueGH7735Power::class, mappedBy="engine", cascade={"all"})
* @Cache("READ_ONLY")
* @var IssueGH7735Power
*/
private $power;

/**
* @Column
* @var string
*/
private $model;

public function __construct(int $id, string $model, IssueGH7735Power $power)
{
$this->id = $id;
$this->model = $model;
$this->power = $power;

$power->setEngine($this);
}

public function getId() : int
{
return $this->id;
}

public function getPower() : IssueGH7735Power
{
return $this->power;
}

public function getModel() : string
{
return $this->model;
}
}

/**
* @Entity
* @Cache(usage="READ_ONLY")
*/
class IssueGH7735Power
{
/**
* @Id
* @Column(type="integer")
*/
private $id;

/**
* @OneToOne(targetEntity=IssueGH7735Engine::class, inversedBy="power")
* @Cache("READ_ONLY")
* @var IssueGH7735Engine
*/
private $engine;

public function __construct(int $id)
{
$this->id = $id;
}

public function getId() : int
{
return $this->id;
}

public function setEngine(IssueGH7735Engine $engine) : void
{
$this->engine = $engine;
}

public function getEngine() : IssueGH7735Engine
{
return $this->engine;
}
}

0 comments on commit 5234ca2

Please sign in to comment.