. */ namespace Doctrine\Tests\ORM\Query; require_once __DIR__ . '/../../TestInit.php'; /** * Test case for testing the saving and referencing of query identifiers. * * @author Guilherme Blanco * @author Janne Vanhala * @author Konsta Vesterinen * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link http://www.phpdoctrine.org * @since 2.0 * @version $Revision$ */ class IdentifierRecognitionTest extends \Doctrine\Tests\OrmTestCase { private $_em; protected function setUp() { parent::setUp(); $this->_em = $this->_getTestEntityManager(); } public function testSingleAliasDeclarationIsSupported() { $entityManager = $this->_em; $query = $entityManager->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertEquals(null, $decl['relation']); $this->assertEquals(null, $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals(null, $decl['map']); } public function testSingleAliasDeclarationWithIndexByIsSupported() { $entityManager = $this->_em; $query = $entityManager->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertEquals(null, $decl['relation']); $this->assertEquals(null, $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals('id', $decl['map']); } public function testQueryParserSupportsMultipleAliasDeclarations() { $entityManager = $this->_em; $query = $entityManager->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id LEFT JOIN u.phonenumbers p'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertEquals(null, $decl['relation']); $this->assertEquals(null, $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals('id', $decl['map']); $decl = $parserResult->getQueryComponent('p'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertTrue($decl['relation'] instanceof \Doctrine\ORM\Mapping\AssociationMapping); $this->assertEquals('u', $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals(null, $decl['map']); } public function testQueryParserSupportsMultipleAliasDeclarationsWithIndexBy() { $entityManager = $this->_em; $query = $entityManager->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id LEFT JOIN u.articles a INNER JOIN u.phonenumbers pn INDEX BY pn.phonenumber'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertEquals(null, $decl['relation']); $this->assertEquals(null, $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals('id', $decl['map']); $decl = $parserResult->getQueryComponent('a'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertTrue($decl['relation'] instanceof \Doctrine\ORM\Mapping\AssociationMapping); $this->assertEquals('u', $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals(null, $decl['map']); $decl = $parserResult->getQueryComponent('pn'); $this->assertTrue($decl['metadata'] instanceof \Doctrine\ORM\Mapping\ClassMetadata); $this->assertTrue($decl['relation'] instanceof \Doctrine\ORM\Mapping\AssociationMapping); $this->assertEquals('u', $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals('phonenumber', $decl['map']); } }