Changeset 4452 for trunk/tests/Orm

Show
Ignore:
Timestamp:
05/27/08 05:52:50 (8 months ago)
Author:
guilhermeblanco
Message:

Changed Doctrine_Query to accept a Doctrine_EntityManager instead of a Doctrine_Connection. Updated Doctrine_EntityManager. Updated test cases and included one new passing test case for SELECT generation. Fixed whitespace bug in DELETE and UPDATE statements.

Location:
trunk/tests/Orm/Query
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/Orm/Query/DeleteSqlGenerationTest.php

    r4431 r4452  
    3838class Orm_Query_DeleteSqlGenerationTest extends Doctrine_OrmTestCase 
    3939{ 
     40    public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) 
     41    { 
     42        try { 
     43            $entityManager = Doctrine_EntityManager::getManager(); 
     44            $query = $entityManager->createQuery($dqlToBeTested); 
     45 
     46            parent::assertEquals($sqlToBeConfirmed, $query->getSql()); 
     47 
     48            $query->free(); 
     49        } catch (Doctrine_Exception $e) { 
     50            $this->fail($e->getMessage()); 
     51        } 
     52    } 
     53 
     54 
    4055    public function testWithoutWhere() 
    4156    { 
    42         $q = new Doctrine_Query(); 
    43  
    4457        // NO WhereClause 
    45         $q->setDql('DELETE CmsUser u'); 
    46         $this->assertEquals('DELETE FROM cms_user cu WHERE 1 = 1', $q->getSql()); 
    47         $q->free(); 
    48  
    49         $q->setDql('DELETE FROM CmsUser u'); 
    50         $this->assertEquals('DELETE FROM cms_user cu WHERE 1 = 1', $q->getSql()); 
    51         $q->free(); 
     58        $this->assertSqlGeneration( 
     59            'DELETE CmsUser u',  
     60            'DELETE FROM cms_user cu WHERE 1 = 1' 
     61        ); 
     62 
     63        $this->assertSqlGeneration( 
     64            'DELETE FROM CmsUser u', 
     65            'DELETE FROM cms_user cu WHERE 1 = 1' 
     66        ); 
    5267    } 
    5368 
     
    5570    public function testWithWhere() 
    5671    { 
    57         $q = new Doctrine_Query(); 
    58  
    5972        // "WHERE" ConditionalExpression 
    6073        // ConditionalExpression = ConditionalTerm {"OR" ConditionalTerm} 
     
    6780 
    6881        // If this one test fail, all others will fail too. That's the simplest case possible 
    69         $q->setDql('DELETE CmsUser u WHERE id = ?'); 
    70         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id = ?', $q->getSql()); 
    71         $q->free(); 
     82        $this->assertSqlGeneration( 
     83            'DELETE CmsUser u WHERE id = ?', 
     84            'DELETE FROM cms_user cu WHERE cu.id = ?' 
     85        ); 
    7286    } 
    7387 
     
    7589    public function testWithConditionalExpressions() 
    7690    { 
    77         $q = new Doctrine_Query(); 
    78  
    79         $q->setDql('DELETE CmsUser u WHERE u.username = ? OR u.name = ?'); 
    80         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.username = ? OR cu.name = ?', $q->getSql()); 
    81         $q->free(); 
    82  
    83         $q->setDql('DELETE CmsUser u WHERE u.id = ? OR ( u.username = ? OR u.name = ? )'); 
    84         $this->assertEquals( 
    85             'DELETE FROM cms_user cu WHERE cu.id = ? OR (cu.username = ? OR cu.name = ?)', 
    86             $q->getSql() 
    87         ); 
    88         $q->free(); 
    89  
    90         $q->setDql('DELETE FROM CmsUser WHERE id = ?'); 
    91         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id = ?', $q->getSql()); 
    92         $q->free(); 
    93     } 
    94  
    95  
    96     public function testInvalidSyntaxIsRejected() 
    97     { 
    98         $q = new Doctrine_Query(); 
    99  
    100         $invalidDql = 'FOOBAR CmsUser'; 
    101         $q->setDql($invalidDql); 
    102         try { 
    103             $q->getSql(); 
    104             $this->fail("Invalid DQL '$invalidDql' was not rejected."); 
    105         } catch (Doctrine_Exception $parseEx) {} 
    106         $q->free(); 
    107  
    108         $invalidDql = 'DELETE FROM CmsUser.articles'; 
    109         $q->setDql($invalidDql); 
    110         try { 
    111             $q->getSql(); 
    112             $this->fail("Invalid DQL '$invalidDql' was not rejected."); 
    113         } catch (Doctrine_Exception $parseEx) {} 
    114         $q->free(); 
    115  
    116         $invalidDql = 'DELETE FROM CmsUser cu WHERE cu.articles.id > ?'; 
    117         $q->setDql($invalidDql); 
    118         try { 
    119             $q->getSql(); 
    120             $this->fail("Invalid DQL '$invalidDql' was not rejected."); 
    121         } catch (Doctrine_Exception $parseEx) {} 
    122         $q->free(); 
     91        $this->assertSqlGeneration( 
     92            'DELETE CmsUser u WHERE u.username = ? OR u.name = ?', 
     93            'DELETE FROM cms_user cu WHERE cu.username = ? OR cu.name = ?' 
     94        ); 
     95 
     96        $this->assertSqlGeneration( 
     97            'DELETE CmsUser u WHERE u.id = ? OR ( u.username = ? OR u.name = ? )', 
     98            'DELETE FROM cms_user cu WHERE cu.id = ? OR (cu.username = ? OR cu.name = ?)' 
     99        ); 
     100 
     101        $this->assertSqlGeneration( 
     102            'DELETE FROM CmsUser WHERE id = ?', 
     103            'DELETE FROM cms_user cu WHERE cu.id = ?' 
     104        ); 
    123105    } 
    124106 
     
    126108    public function testParserIsCaseAgnostic() 
    127109    { 
    128         $q = new Doctrine_Query(); 
    129         $q->setDql('delete from CmsUser u where u.username = ?'); 
    130         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.username = ?', $q->getSql()); 
     110        $this->assertSqlGeneration( 
     111            "delete from CmsUser u where u.username = ?", 
     112            "DELETE FROM cms_user cu WHERE cu.username = ?" 
     113        ); 
    131114    } 
    132115 
     
    134117    public function testWithConditionalTerms() 
    135118    { 
    136         $q = new Doctrine_Query(); 
    137  
    138         $q->setDql('DELETE CmsUser u WHERE u.username = ? AND u.name = ?'); 
    139         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.username = ? AND cu.name = ?', $q->getSql()); 
    140         $q->free(); 
     119        $this->assertSqlGeneration( 
     120            "DELETE CmsUser u WHERE u.username = ? AND u.name = ?", 
     121            "DELETE FROM cms_user cu WHERE cu.username = ? AND cu.name = ?" 
     122        ); 
    141123    } 
    142124 
     
    144126    public function testWithConditionalFactors() 
    145127    { 
    146         $q = new Doctrine_Query(); 
    147  
    148         $q->setDql('DELETE CmsUser u WHERE NOT id != ?'); 
    149         $this->assertEquals('DELETE FROM cms_user cu WHERE NOT cu.id <> ?', $q->getSql()); 
    150         $q->free(); 
    151  
    152         $q->setDql('DELETE CmsUser u WHERE NOT ( id != ? )'); 
    153         $this->assertEquals('DELETE FROM cms_user cu WHERE NOT (cu.id <> ?)', $q->getSql()); 
    154         $q->free(); 
    155  
    156         $q->setDql('DELETE CmsUser u WHERE NOT ( id != ? AND username = ? )'); 
    157         $this->assertEquals('DELETE FROM cms_user cu WHERE NOT (cu.id <> ? AND cu.username = ?)', $q->getSql()); 
    158         $q->free(); 
     128        $this->assertSqlGeneration( 
     129            "DELETE CmsUser u WHERE NOT id != ?", 
     130            "DELETE FROM cms_user cu WHERE NOT cu.id <> ?" 
     131        ); 
     132 
     133        $this->assertSqlGeneration( 
     134            "DELETE CmsUser u WHERE NOT ( id != ? )", 
     135            "DELETE FROM cms_user cu WHERE NOT (cu.id <> ?)" 
     136        ); 
     137 
     138        $this->assertSqlGeneration( 
     139            "DELETE CmsUser u WHERE NOT ( id != ? AND username = ? )", 
     140            "DELETE FROM cms_user cu WHERE NOT (cu.id <> ? AND cu.username = ?)" 
     141        ); 
    159142    } 
    160143 
     
    165148    public function testWithExprAndComparison() 
    166149    { 
    167         $q = new Doctrine_Query(); 
    168  
    169150        // id = ? was already tested (see testDeleteWithWhere()) 
    170  
    171         $q->setDql('DELETE CmsUser u WHERE id > ?'); 
    172         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id > ?', $q->getSql()); 
    173         $q->free(); 
    174  
    175         $q->setDql('DELETE CmsUser u WHERE id >= ?'); 
    176         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id >= ?', $q->getSql()); 
    177         $q->free(); 
    178  
    179         $q->setDql('DELETE CmsUser u WHERE id < ?'); 
    180         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id < ?', $q->getSql()); 
    181         $q->free(); 
    182  
    183         $q->setDql('DELETE CmsUser u WHERE id <= ?'); 
    184         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id <= ?', $q->getSql()); 
    185         $q->free(); 
    186  
    187         $q->setDql('DELETE CmsUser u WHERE id <> ?'); 
    188         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id <> ?', $q->getSql()); 
    189         $q->free(); 
    190  
    191         $q->setDql('DELETE CmsUser u WHERE id != ?'); 
    192         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id <> ?', $q->getSql()); 
    193         $q->free(); 
     151        $this->assertSqlGeneration( 
     152            "DELETE CmsUser u WHERE id > ?", 
     153            "DELETE FROM cms_user cu WHERE cu.id > ?" 
     154        ); 
     155 
     156        $this->assertSqlGeneration( 
     157            "DELETE CmsUser u WHERE id >= ?", 
     158            "DELETE FROM cms_user cu WHERE cu.id >= ?" 
     159        ); 
     160 
     161        $this->assertSqlGeneration( 
     162            "DELETE CmsUser u WHERE id < ?", 
     163            "DELETE FROM cms_user cu WHERE cu.id < ?" 
     164        ); 
     165 
     166        $this->assertSqlGeneration( 
     167            "DELETE CmsUser u WHERE id <= ?", 
     168            "DELETE FROM cms_user cu WHERE cu.id <= ?" 
     169        ); 
     170 
     171        $this->assertSqlGeneration( 
     172            "DELETE CmsUser u WHERE id <> ?", 
     173            "DELETE FROM cms_user cu WHERE cu.id <> ?" 
     174        ); 
     175 
     176        $this->assertSqlGeneration( 
     177            "DELETE CmsUser u WHERE id != ?", 
     178            "DELETE FROM cms_user cu WHERE cu.id <> ?" 
     179        ); 
    194180    } 
    195181 
     
    197183    public function testWithExprAndBetween() 
    198184    { 
    199         $q = new Doctrine_Query(); 
    200  
    201185        // "WHERE" Expression BetweenExpression 
    202         $q->setDql('DELETE CmsUser u WHERE u.id NOT BETWEEN ? AND ?'); 
    203         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id NOT BETWEEN ? AND ?', $q->getSql()); 
    204         $q->free(); 
    205  
    206         $q->setDql('DELETE CmsUser u WHERE u.id BETWEEN ? AND ? AND u.username != ?'); 
    207         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id BETWEEN ? AND ? AND cu.username <> ?', $q->getSql()); 
    208         $q->free(); 
     186        $this->assertSqlGeneration( 
     187            "DELETE CmsUser u WHERE u.id NOT BETWEEN ? AND ?", 
     188            "DELETE FROM cms_user cu WHERE cu.id NOT BETWEEN ? AND ?" 
     189        ); 
     190 
     191        $this->assertSqlGeneration( 
     192            "DELETE CmsUser u WHERE u.id BETWEEN ? AND ? AND u.username != ?", 
     193            "DELETE FROM cms_user cu WHERE cu.id BETWEEN ? AND ? AND cu.username <> ?" 
     194        ); 
    209195    } 
    210196 
     
    212198    public function testWithExprAndLike() 
    213199    { 
    214         $q = new Doctrine_Query(); 
    215  
    216200        // "WHERE" Expression LikeExpression 
    217         $q->setDql('DELETE CmsUser u WHERE u.username NOT LIKE ?'); 
    218         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.username NOT LIKE ?', $q->getSql()); 
    219         $q->free(); 
    220  
    221         $q->setDql("DELETE CmsUser u WHERE u.username LIKE ? ESCAPE '\\'"); 
    222         $this->assertEquals("DELETE FROM cms_user cu WHERE cu.username LIKE ? ESCAPE '\\'", $q->getSql()); 
    223         $q->free(); 
     201        $this->assertSqlGeneration( 
     202            'DELETE CmsUser u WHERE u.username NOT LIKE ?', 
     203            'DELETE FROM cms_user cu WHERE cu.username NOT LIKE ?' 
     204        ); 
     205 
     206        $this->assertSqlGeneration( 
     207            "DELETE CmsUser u WHERE u.username LIKE ? ESCAPE '\\'", 
     208            "DELETE FROM cms_user cu WHERE cu.username LIKE ? ESCAPE '\\'" 
     209        ); 
    224210    } 
    225211 
     
    227213    public function testWithExprAndIn() 
    228214    { 
    229         $q = new Doctrine_Query(); 
    230  
    231215        // "WHERE" Expression InExpression 
    232         $q->setDql('DELETE CmsUser u WHERE u.id IN ( ?, ?, ?, ? )'); 
    233         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id IN (?, ?, ?, ?)', $q->getSql()); 
    234         $q->free(); 
    235  
    236         $q->setDql('DELETE CmsUser u WHERE u.id NOT IN ( ?, ? )'); 
    237         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.id NOT IN (?, ?)', $q->getSql()); 
    238         $q->free(); 
     216        $this->assertSqlGeneration( 
     217            'DELETE CmsUser u WHERE u.id IN ( ?, ?, ?, ? )', 
     218            'DELETE FROM cms_user cu WHERE cu.id IN (?, ?, ?, ?)' 
     219        ); 
     220 
     221        $this->assertSqlGeneration( 
     222            'DELETE CmsUser u WHERE u.id NOT IN ( ?, ? )', 
     223            'DELETE FROM cms_user cu WHERE cu.id NOT IN (?, ?)' 
     224        ); 
    239225    } 
    240226 
     
    242228    public function testWithExprAndNull() 
    243229    { 
    244         $q = new Doctrine_Query(); 
    245  
    246230        // "WHERE" Expression NullComparisonExpression 
    247         $q->setDql('DELETE CmsUser u WHERE u.name IS NULL'); 
    248         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.name IS NULL', $q->getSql()); 
    249         $q->free(); 
    250  
    251         $q->setDql('DELETE CmsUser u WHERE u.name IS NOT NULL'); 
    252         $this->assertEquals('DELETE FROM cms_user cu WHERE cu.name IS NOT NULL', $q->getSql()); 
    253         $q->free(); 
     231        $this->assertSqlGeneration( 
     232            'DELETE CmsUser u WHERE u.name IS NULL', 
     233            'DELETE FROM cms_user cu WHERE cu.name IS NULL' 
     234        ); 
     235 
     236        $this->assertSqlGeneration( 
     237            'DELETE CmsUser u WHERE u.name IS NOT NULL', 
     238            'DELETE FROM cms_user cu WHERE cu.name IS NOT NULL' 
     239        ); 
    254240    } 
    255241 
     
    259245    public function testWithPrimaryAsAtom() 
    260246    { 
    261         $q = new Doctrine_Query(); 
    262  
    263247        // Atom = string | integer | float | boolean | input_parameter 
    264         $q->setDql('DELETE CmsUser u WHERE 1 = 1'); 
    265         $this->assertEquals('DELETE FROM cms_user cu WHERE 1 = 1', $q->getSql()); 
    266         $q->free(); 
    267  
    268         $q->setDql('DELETE CmsUser u WHERE ? = 1'); 
    269         $this->assertEquals('DELETE FROM cms_user cu WHERE ? = 1', $q->getSql()); 
    270         $q->free(); 
     248        $this->assertSqlGeneration( 
     249            'DELETE CmsUser u WHERE 1 = 1', 
     250            'DELETE FROM cms_user cu WHERE 1 = 1' 
     251        ); 
     252 
     253        $this->assertSqlGeneration( 
     254            'DELETE CmsUser u WHERE ? = 1', 
     255            'DELETE FROM cms_user cu WHERE ? = 1' 
     256        ); 
    271257    } 
    272258} 
  • trunk/tests/Orm/Query/DqlGenerationTest.php

    r4422 r4452  
    3535class Orm_Query_DqlGenerationTest extends Doctrine_OrmTestCase 
    3636{ 
    37     const QueryClass = 'Doctrine_Query'; 
     37    protected function createQuery() 
     38    { 
     39        $entityManager = Doctrine_EntityManager::getManager(); 
     40        return $entityManager->createQuery(); 
     41    } 
     42 
    3843 
    3944    public function testSelect() 
    4045    { 
    41         $class = self::QueryClass; 
    42         $q = new $class(); 
     46        $query = $this->createQuery(); 
    4347 
    4448        // select and from 
    45         $q->setDql('FROM User u'); 
    46         $this->assertEquals('FROM User u', $q->getDql()); // Internally we use SELECT * FROM User u to process the DQL 
    47         $q->free(); 
    48  
    49         $q->select()->from('User u'); 
    50         $this->assertEquals('SELECT * FROM User u', $q->getDql()); 
    51         $q->free(); 
    52  
    53         $q->select('u.*')->from('User u'); 
    54         $this->assertEquals('SELECT u.* FROM User u', $q->getDql()); 
    55         $q->free(); 
    56  
    57         $q->select('u.id')->from('User u'); 
    58         $this->assertEquals('SELECT u.id FROM User u', $q->getDql()); 
    59         $q->free(); 
    60  
    61         $q->select('u.id, u.name')->from('User u'); 
    62         $this->assertEquals('SELECT u.id, u.name FROM User u', $q->getDql()); 
    63         $q->free(); 
    64  
    65         $q->select('u.name AS myCustomName')->from('User u'); 
    66         $this->assertEquals('SELECT u.name AS myCustomName FROM User u', $q->getDql()); 
    67         $q->free(); 
    68  
    69         $q->select('u.id')->select('u.name')->from('User u'); 
    70         $this->assertEquals('SELECT u.id, u.name FROM User u', $q->getDql()); 
    71         $q->free(); 
     49        $query->setDql('FROM User u'); 
     50        $this->assertEquals('FROM User u', $query->getDql()); // Internally we use SELECT * FROM User u to process the DQL 
     51        $query->free(); 
     52 
     53        $query->select()->from('User u'); 
     54        $this->assertEquals('SELECT * FROM User u', $query->getDql()); 
     55        $query->free(); 
     56 
     57        $query->select('u.*')->from('User u'); 
     58        $this->assertEquals('SELECT u.* FROM User u', $query->getDql()); 
     59        $query->free(); 
     60 
     61        $query->select('u.id')->from('User u'); 
     62        $this->assertEquals('SELECT u.id FROM User u', $query->getDql()); 
     63        $query->free(); 
     64 
     65        $query->select('u.id, u.name')->from('User u'); 
     66        $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql()); 
     67        $query->free(); 
     68 
     69        $query->select('u.name AS myCustomName')->from('User u'); 
     70        $this->assertEquals('SELECT u.name AS myCustomName FROM User u', $query->getDql()); 
     71        $query->free(); 
     72 
     73        $query->select('u.id')->select('u.name')->from('User u'); 
     74        $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql()); 
     75        $query->free(); 
    7276    } 
    7377 
     
    7579    public function testSelectDistinct() 
    7680    { 
    77         $class = self::QueryClass; 
    78         $q = new $class(); 
    79  
    80         $q->select()->distinct()->from('User u'); 
    81         $this->assertEquals('SELECT DISTINCT * FROM User u', $q->getDql()); 
    82         $q->free(); 
    83  
    84         $q->select('u.name')->distinct(false)->from('User u'); 
    85         $this->assertEquals('SELECT u.name FROM User u', $q->getDql()); 
    86         $q->free(); 
    87  
    88         $q->select()->distinct(false)->from('User u'); 
    89         $this->assertEquals('SELECT * FROM User u', $q->getDql()); 
    90         $q->free(); 
    91  
    92         $q->select('u.name')->distinct()->from('User u'); 
    93         $this->assertEquals('SELECT DISTINCT u.name FROM User u', $q->getDql()); 
    94         $q->free(); 
    95  
    96         $q->select('u.name, u.email')->distinct()->from('User u'); 
    97         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $q->getDql()); 
    98         $q->free(); 
    99  
    100         $q->select('u.name')->select('u.email')->distinct()->from('User u'); 
    101         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $q->getDql()); 
    102         $q->free(); 
    103  
    104         $q->select('DISTINCT u.name')->from('User u'); 
    105         $this->assertEquals('SELECT DISTINCT u.name FROM User u', $q->getDql()); 
    106         $q->free(); 
    107  
    108         $q->select('DISTINCT u.name, u.email')->from('User u'); 
    109         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $q->getDql()); 
    110         $q->free(); 
    111  
    112         $q->select('DISTINCT u.name')->select('u.email')->from('User u'); 
    113         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $q->getDql()); 
    114         $q->free(); 
     81        $query = $this->createQuery(); 
     82 
     83        $query->select()->distinct()->from('User u'); 
     84        $this->assertEquals('SELECT DISTINCT * FROM User u', $query->getDql()); 
     85        $query->free(); 
     86 
     87        $query->select('u.name')->distinct(false)->from('User u'); 
     88        $this->assertEquals('SELECT u.name FROM User u', $query->getDql()); 
     89        $query->free(); 
     90 
     91        $query->select()->distinct(false)->from('User u'); 
     92        $this->assertEquals('SELECT * FROM User u', $query->getDql()); 
     93        $query->free(); 
     94 
     95        $query->select('u.name')->distinct()->from('User u'); 
     96        $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql()); 
     97        $query->free(); 
     98 
     99        $query->select('u.name, u.email')->distinct()->from('User u'); 
     100        $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql()); 
     101        $query->free(); 
     102 
     103        $query->select('u.name')->select('u.email')->distinct()->from('User u'); 
     104        $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql()); 
     105        $query->free(); 
     106 
     107        $query->select('DISTINCT u.name')->from('User u'); 
     108        $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql()); 
     109        $query->free(); 
     110 
     111        $query->select('DISTINCT u.name, u.email')->from('User u'); 
     112        $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql()); 
     113        $query->free(); 
     114 
     115        $query->select('DISTINCT u.name')->select('u.email')->from('User u'); 
     116        $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql()); 
     117        $query->free(); 
    115118    } 
    116119 
     
    118121    public function testSelectJoin() 
    119122    { 
    120         $class = self::QueryClass; 
    121         $q = new $class(); 
    122  
    123         $q->select('u.*')->from('User u')->join('u.Group g')->where('g.id = ?', 1); 
    124         $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $q->getDql()); 
    125         $this->assertEquals(array(1), $q->getParams()); 
    126         $q->free(); 
    127  
    128         $q->select('u.*')->from('User u')->innerJoin('u.Group g')->where('g.id = ?', 1); 
    129         $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $q->getDql()); 
    130         $this->assertEquals(array(1), $q->getParams()); 
    131         $q->free(); 
    132  
    133         $q->select('u.*')->from('User u')->leftJoin('u.Group g')->where('g.id IS NULL'); 
    134         $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.Group g WHERE g.id IS NULL', $q->getDql()); 
    135         $q->free(); 
    136  
    137         $q->select('u.*')->from('User u')->leftJoin('u.UserGroup ug')->leftJoin('ug.Group g')->where('g.name = ?', 'admin'); 
    138         $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.UserGroup ug LEFT JOIN ug.Group g WHERE g.name = ?', $q->getDql()); 
    139         $q->free(); 
     123        $query = $this->createQuery(); 
     124 
     125        $query->select('u.*')->from('User u')->join('u.Group g')->where('g.id = ?', 1); 
     126        $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $query->getDql()); 
     127        $this->assertEquals(array(1), $query->getParams()); 
     128        $query->free(); 
     129 
     130        $query->select('u.*')->from('User u')->innerJoin('u.Group g')->where('g.id = ?', 1); 
     131        $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $query->getDql()); 
     132        $this->assertEquals(array(1), $query->getParams()); 
     133        $query->free(); 
     134 
     135        $query->select('u.*')->from('User u')->leftJoin('u.Group g')->where('g.id IS NULL'); 
     136        $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.Group g WHERE g.id IS NULL', $query->getDql()); 
     137        $query->free(); 
     138 
     139        $query->select('u.*')->from('User u')->leftJoin('u.UserGroup ug')->leftJoin('ug.Group g')->where('g.name = ?', 'admin'); 
     140        $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.UserGroup ug LEFT JOIN ug.Group g WHERE g.name = ?', $query->getDql()); 
     141        $query->free(); 
    140142    } 
    141143 
     
    143145    public function testSelectWhere() 
    144146    { 
    145         $class = self::QueryClass; 
    146         $q = new $class(); 
    147  
    148         $q->select('u.name')->from('User u')->where('u.id = ?', 1); 
    149         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ?', $q->getDql()); 
    150         $this->assertEquals(array(1), $q->getParams()); 
    151         $q->free(); 
    152  
    153         $q->select('u.name')->from('User u')->where('u.id = ? AND u.type != ?', array(1, 'admin')); 
    154         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $q->getDql()); 
    155         $this->assertEquals(array(1, 'admin'), $q->getParams()); 
    156         $q->free(); 
    157  
    158         $q->select('u.name')->from('User u')->where('u.id = ?', 1)->andWhere('u.type != ?', 'admin'); 
    159         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $q->getDql()); 
    160         $this->assertEquals(array(1, 'admin'), $q->getParams()); 
    161         $q->free(); 
    162  
    163         $q->select('u.name')->from('User u')->where('( u.id = ?', 1)->andWhere('u.type != ? )', 'admin'); 
    164         $this->assertEquals('SELECT u.name FROM User u WHERE ( u.id = ? AND u.type != ? )', $q->getDql()); 
    165         $this->assertEquals(array(1, 'admin'), $q->getParams()); 
    166         $q->free(); 
    167  
    168         $q->select('u.name')->from('User u')->where('u.id = ? OR u.type != ?', array(1, 'admin')); 
    169         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $q->getDql()); 
    170         $this->assertEquals(array(1, 'admin'), $q->getParams()); 
    171         $q->free(); 
    172  
    173         $q->select('u.name')->from('User u')->where('u.id = ?', 1)->orWhere('u.type != ?', 'admin'); 
    174         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $q->getDql()); 
    175         $this->assertEquals(array(1, 'admin'), $q->getParams()); 
    176         $q->free(); 
    177  
    178         $q->select('u.name')->from('User u')->andwhere('u.id = ?', 1)->andWhere('u.type != ?', 'admin')->orWhere('u.email = ?', 'admin@localhost'); 
    179         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ? OR u.email = ?', $q->getDql()); 
    180         $this->assertEquals(array(1, 'admin', 'admin@localhost'), $q->getParams()); 
    181         $q->free(); 
     147        $query = $this->createQuery(); 
     148 
     149        $query->select('u.name')->from('User u')->where('u.id = ?', 1); 
     150        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ?', $query->getDql()); 
     151        $this->assertEquals(array(1), $query->getParams()); 
     152        $query->free(); 
     153 
     154        $query->select('u.name')->from('User u')->where('u.id = ? AND u.type != ?', array(1, 'admin')); 
     155        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $query->getDql()); 
     156        $this->assertEquals(array(1, 'admin'), $query->getParams()); 
     157        $query->free(); 
     158 
     159        $query->select('u.name')->from('User u')->where('u.id = ?', 1)->andWhere('u.type != ?', 'admin'); 
     160        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $query->getDql()); 
     161        $this->assertEquals(array(1, 'admin'), $query->getParams()); 
     162        $query->free(); 
     163 
     164        $query->select('u.name')->from('User u')->where('( u.id = ?', 1)->andWhere('u.type != ? )', 'admin'); 
     165        $this->assertEquals('SELECT u.name FROM User u WHERE ( u.id = ? AND u.type != ? )', $query->getDql()); 
     166        $this->assertEquals(array(1, 'admin'), $query->getParams()); 
     167        $query->free(); 
     168 
     169        $query->select('u.name')->from('User u')->where('u.id = ? OR u.type != ?', array(1, 'admin')); 
     170        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $query->getDql()); 
     171        $this->assertEquals(array(1, 'admin'), $query->getParams()); 
     172        $query->free(); 
     173 
     174        $query->select('u.name')->from('User u')->where('u.id = ?', 1)->orWhere('u.type != ?', 'admin'); 
     175        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $query->getDql()); 
     176        $this->assertEquals(array(1, 'admin'), $query->getParams()); 
     177        $query->free(); 
     178 
     179        $query->select('u.name')->from('User u')->andwhere('u.id = ?', 1)->andWhere('u.type != ?', 'admin')->orWhere('u.email = ?', 'admin@localhost'); 
     180        $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ? OR u.email = ?', $query->getDql()); 
     181        $this->assertEquals(array(1, 'admin', 'admin@localhost'), $query->getParams()); 
     182        $query->free(); 
    182183    } 
    183184 
     
    185186    public function testSelectWhereIn() 
    186187    { 
    187         $class = self::QueryClass; 
    188         $q = new $class(); 
    189