2008-05-24 22:18:37 +04:00
< ? php
/*
* $Id $
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL . For more information , see
* < http :// www . phpdoctrine . org >.
*/
require_once 'lib/DoctrineTestInit.php' ;
/**
* Test case for testing the saving and referencing of query identifiers .
*
* @ package Doctrine
* @ subpackage Query
* @ author Guilherme Blanco < guilhermeblanco @ hotmail . com >
* @ author Janne Vanhala < jpvanhal @ cc . hut . fi >
* @ author Konsta Vesterinen < kvesteri @ cc . hut . fi >
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// www . phpdoctrine . org
2008-06-15 19:56:28 +04:00
* @ since 2.0
2008-05-24 22:18:37 +04:00
* @ version $Revision $
*/
class Orm_Query_IdentifierRecognitionTest extends Doctrine_OrmTestCase
{
public function testSingleAliasDeclarationIsSupported ()
{
2008-06-15 19:56:28 +04:00
$entityManager = $this -> _em ;
2008-05-27 08:52:50 +04:00
$query = $entityManager -> createQuery ( 'SELECT u.* FROM CmsUser u' );
2008-05-24 22:18:37 +04:00
$parserResult = $query -> parse ();
$decl = $parserResult -> getQueryComponent ( 'u' );
2008-09-12 21:39:39 +04:00
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ORM_Mapping_ClassMetadata );
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( null , $decl [ 'relation' ]);
$this -> assertEquals ( null , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( null , $decl [ 'map' ]);
}
public function testSingleAliasDeclarationWithIndexByIsSupported ()
{
2008-06-15 19:56:28 +04:00
$entityManager = $this -> _em ;
2008-09-12 10:09:16 +04:00
$query = $entityManager -> createQuery ( 'SELECT u.* FROM CmsUser u INDEX BY u.id' );
2008-05-24 22:18:37 +04:00
$parserResult = $query -> parse ();
$decl = $parserResult -> getQueryComponent ( 'u' );
2008-09-12 21:39:39 +04:00
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ORM_Mapping_ClassMetadata );
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( null , $decl [ 'relation' ]);
$this -> assertEquals ( null , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 23:37:02 +04:00
$this -> assertEquals ( 'id' , $decl [ 'map' ]);
2008-05-24 22:18:37 +04:00
}
public function testQueryParserSupportsMultipleAliasDeclarations ()
{
2008-06-15 19:56:28 +04:00
$entityManager = $this -> _em ;
2008-09-13 10:34:47 +04:00
$query = $entityManager -> createQuery ( 'SELECT u.* FROM CmsUser u INDEX BY u.id LEFT JOIN u.phonenumbers p' );
2008-05-24 22:18:37 +04:00
$parserResult = $query -> parse ();
$decl = $parserResult -> getQueryComponent ( 'u' );
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ClassMetadata );
$this -> assertEquals ( null , $decl [ 'relation' ]);
$this -> assertEquals ( null , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 23:37:02 +04:00
$this -> assertEquals ( 'id' , $decl [ 'map' ]);
2008-05-24 22:18:37 +04:00
$decl = $parserResult -> getQueryComponent ( 'p' );
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ClassMetadata );
2008-08-16 23:40:59 +04:00
$this -> assertTrue ( $decl [ 'relation' ] instanceof Doctrine_Association );
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( 'u' , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( null , $decl [ 'map' ]);
}
public function testQueryParserSupportsMultipleAliasDeclarationsWithIndexBy ()
{
2008-06-15 19:56:28 +04:00
$entityManager = $this -> _em ;
2008-09-13 10:34:47 +04:00
$query = $entityManager -> createQuery ( 'SELECT u.* FROM CmsUser u INDEX BY u.id LEFT JOIN u.articles a INNER JOIN u.phonenumbers pn INDEX BY pn.phonenumber' );
2008-05-24 22:18:37 +04:00
$parserResult = $query -> parse ();
$decl = $parserResult -> getQueryComponent ( 'u' );
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ClassMetadata );
$this -> assertEquals ( null , $decl [ 'relation' ]);
$this -> assertEquals ( null , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 23:37:02 +04:00
$this -> assertEquals ( 'id' , $decl [ 'map' ]);
2008-05-24 22:18:37 +04:00
$decl = $parserResult -> getQueryComponent ( 'a' );
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ClassMetadata );
2008-08-16 23:40:59 +04:00
$this -> assertTrue ( $decl [ 'relation' ] instanceof Doctrine_Association );
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( 'u' , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( null , $decl [ 'map' ]);
$decl = $parserResult -> getQueryComponent ( 'pn' );
$this -> assertTrue ( $decl [ 'metadata' ] instanceof Doctrine_ClassMetadata );
2008-08-16 23:40:59 +04:00
$this -> assertTrue ( $decl [ 'relation' ] instanceof Doctrine_Association );
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( 'u' , $decl [ 'parent' ]);
2008-05-27 07:44:08 +04:00
$this -> assertEquals ( null , $decl [ 'scalar' ]);
2008-05-24 22:18:37 +04:00
$this -> assertEquals ( 'phonenumber' , $decl [ 'map' ]);
}
}