1
0
mirror of synced 2025-02-09 08:49:26 +03:00

Merge branch 'hotfix/#1572-target-entity-resolver-dql-with-interfaces-support-2.6.x'

Close #1572
This commit is contained in:
Marco Pivetta 2015-12-11 21:34:57 +01:00
commit 6099e45eef
2 changed files with 32 additions and 8 deletions

View File

@ -996,9 +996,7 @@ class Parser
*/
private function validateAbstractSchemaName($schemaName)
{
$exists = class_exists($schemaName, true);
if (! $exists) {
if (! (class_exists($schemaName, true) || interface_exists($schemaName, true))) {
$this->semanticalError("Class '$schemaName' is not defined.", $this->lexer->token);
}
}
@ -1814,7 +1812,7 @@ class Parser
$this->match(Lexer::T_OPEN_CURLY_BRACE);
$this->match(Lexer::T_IDENTIFIER);
$field = $this->lexer->token['value'];
$field = $this->lexer->token['value'];
// First field in partial expression might be embeddable property
while ($this->lexer->isNextToken(Lexer::T_DOT)) {

View File

@ -9,19 +9,19 @@ use Doctrine\ORM\Events;
class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase
{
/**
* @var EntityManager
* @var \Doctrine\ORM\EntityManager
*/
private $em = null;
private $em;
/**
* @var ResolveTargetEntityListener
*/
private $listener = null;
private $listener;
/**
* @var ClassMetadataFactory
*/
private $factory = null;
private $factory;
public function setUp()
{
@ -106,6 +106,32 @@ class ResolveTargetEntityListenerTest extends \Doctrine\Tests\OrmTestCase
$this->assertSame('Doctrine\Tests\ORM\Tools\TargetEntity', $meta['targetEntity']);
$this->assertEquals(array('resolvetargetentity_id', 'targetinterface_id'), $meta['joinTableColumns']);
}
/**
* @group 1572
* @group functional
*
* @coversNothing
*/
public function testDoesResolveTargetEntitiesInDQLAlsoWithInterfaces()
{
$evm = $this->em->getEventManager();
$this->listener->addResolveTargetEntity(
'Doctrine\Tests\ORM\Tools\ResolveTargetInterface',
'Doctrine\Tests\ORM\Tools\ResolveTargetEntity',
array()
);
$evm->addEventSubscriber($this->listener);
$this->assertStringMatchesFormat(
'SELECT%AFROM ResolveTargetEntity%A',
$this
->em
->createQuery('SELECT f FROM Doctrine\Tests\ORM\Tools\ResolveTargetInterface f')
->getSQL()
);
}
}
interface ResolveTargetInterface