Show
Ignore:
Timestamp:
08/27/08 04:40:39 (19 months ago)
Author:
guilhermeblanco
Message:

fixes #1331. Added andWhere, andWhereIn, andWhereNotIn, orWhere, orWhereIn, orWhereNotIn support to 1.0. Added some coverage to this support.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/1.0/tests/QueryTestCase.php

    r4274 r4848  
    176176        } 
    177177    } 
     178     
     179     
     180    public function testOrQuerySupport() 
     181    { 
     182        $q1 = Doctrine_Query::create() 
     183            ->select('u.id') 
     184            ->from('User u') 
     185            ->leftJoin('u.Phonenumber p') 
     186            ->where('u.name = ?') 
     187            ->orWhere('u.loginname = ?'); 
     188             
     189        $q2 = Doctrine_Query::create() 
     190            ->select('u.id') 
     191            ->from('User u') 
     192            ->leftJoin('u.Phonenumber p') 
     193            ->where('u.name = ? OR u.loginname = ?'); 
     194 
     195        $this->assertEqual( 
     196            $q1->getSqlQuery(), 
     197            'SELECT e.id AS e__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id ' . 
     198            'WHERE e.name = ? OR e.loginname = ? AND (e.type = 0)' 
     199        ); 
     200         
     201        $items1 = $q1->execute(array('zYne', 'jwage'), Doctrine::HYDRATE_ARRAY); 
     202        $items2 = $q2->execute(array('zYne', 'jwage'), Doctrine::HYDRATE_ARRAY); 
     203 
     204        $this->assertEqual(count($items1), count($items2)); 
     205         
     206        $q1->free(); 
     207        $q2->free(); 
     208    } 
     209 
     210 
     211    public function testOrQuerySupport2() 
     212    { 
     213        $q1 = Doctrine_Query::create() 
     214            ->select('u.id') 
     215            ->from('User u') 
     216            ->leftJoin('u.Phonenumber p') 
     217            ->where('u.name = ?') 
     218            ->andWhere('u.loginname = ?') 
     219            ->orWhere('u.id = ?'); 
     220             
     221        $q2 = Doctrine_Query::create() 
     222            ->select('u.id') 
     223            ->from('User u') 
     224            ->leftJoin('u.Phonenumber p') 
     225            ->where('(u.name = ? AND u.loginname = ?) OR (u.id = ?)'); 
     226 
     227        $this->assertEqual( 
     228            $q1->getSqlQuery(), 
     229            'SELECT e.id AS e__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id ' . 
     230            'WHERE e.name = ? AND e.loginname = ? OR e.id = ? AND (e.type = 0)' 
     231        ); 
     232         
     233        $items1 = $q1->execute(array('jon', 'jwage', 4), Doctrine::HYDRATE_ARRAY); 
     234        $items2 = $q2->execute(array('jon', 'jwage', 4), Doctrine::HYDRATE_ARRAY); 
     235 
     236        $this->assertEqual(count($items1), count($items2)); 
     237 
     238        $q1->free(); 
     239        $q2->free(); 
     240    } 
     241     
     242     
     243    public function testOrQuerySupport3() 
     244    { 
     245        $q1 = Doctrine_Query::create() 
     246            ->select('u.id') 
     247            ->from('User u') 
     248            ->leftJoin('u.Phonenumber p') 
     249            ->where("u.name = 'jon'") 
     250            ->andWhere("u.loginname = 'jwage'") 
     251            ->orWhere("u.id = 4") 
     252            ->orWhere("u.id = 5") 
     253            ->andWhere("u.name LIKE 'Arnold%'"); 
     254             
     255        $q2 = Doctrine_Query::create() 
     256            ->select('u.id') 
     257            ->from('User u') 
     258            ->leftJoin('u.Phonenumber p') 
     259            ->where("((u.name = 'jon' AND u.loginname = 'jwage') OR (u.id = 4 OR (u.id = 5 AND u.name LIKE 'Arnold%')))"); 
     260 
     261        $this->assertEqual( 
     262            $q1->getSqlQuery(), 
     263            "SELECT e.id AS e__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id " . 
     264            "WHERE e.name = 'jon' AND e.loginname = 'jwage' OR e.id = 4 OR e.id = 5 AND e.name LIKE 'Arnold%' AND (e.type = 0)" 
     265        ); 
     266         
     267        $items1 = $q1->execute(array(), Doctrine::HYDRATE_ARRAY); 
     268        $items2 = $q2->execute(array(), Doctrine::HYDRATE_ARRAY); 
     269 
     270        $this->assertEqual(count($items1), count($items2)); 
     271 
     272        $q1->free(); 
     273        $q2->free(); 
     274    } 
    178275} 
    179276