. */ require_once 'lib/DoctrineTestInit.php'; /** * Test case for testing the saving and referencing of query identifiers. * * @package Doctrine * @subpackage Query * @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 1.0 * @version $Revision$ */ class Orm_Query_IdentifierRecognitionTest extends Doctrine_OrmTestCase { public function testSingleAliasDeclarationIsSupported() { $entityManager = Doctrine_EntityManager::getManager(); $query = $entityManager->createQuery('SELECT u.* FROM CmsUser u'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof Doctrine_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 = Doctrine_EntityManager::getManager(); $query = $entityManager->createQuery('SELECT u.* FROM CmsUser u INDEX BY id'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof Doctrine_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 = Doctrine_EntityManager::getManager(); $query = $entityManager->createQuery('SELECT u.* FROM CmsUser u INDEX BY id LEFT JOIN u.phonenumbers p'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof Doctrine_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_ClassMetadata); $this->assertTrue($decl['relation'] instanceof Doctrine_Relation); $this->assertEquals('u', $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals(null, $decl['map']); } public function testQueryParserSupportsMultipleAliasDeclarationsWithIndexBy() { $entityManager = Doctrine_EntityManager::getManager(); $query = $entityManager->createQuery('SELECT u.* FROM CmsUser u INDEX BY id LEFT JOIN u.articles a INNER JOIN u.phonenumbers pn INDEX BY phonenumber'); $parserResult = $query->parse(); $decl = $parserResult->getQueryComponent('u'); $this->assertTrue($decl['metadata'] instanceof Doctrine_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_ClassMetadata); $this->assertTrue($decl['relation'] instanceof Doctrine_Relation); $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_ClassMetadata); $this->assertTrue($decl['relation'] instanceof Doctrine_Relation); $this->assertEquals('u', $decl['parent']); $this->assertEquals(null, $decl['scalar']); $this->assertEquals('phonenumber', $decl['map']); } }