Changeset 4375 for trunk/tests/Orm

Show
Ignore:
Timestamp:
05/17/08 21:04:56 (8 months ago)
Author:
romanb
Message:

Initial support for scalar hydration (HYDRATE_SCALAR). EntityPersisters? born.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/tests/Orm/Hydration/BasicHydrationTest.php

    r4374 r4375  
    1818        return array( 
    1919          array('hydrationMode' => Doctrine::HYDRATE_RECORD), 
    20           array('hydrationMode' => Doctrine::HYDRATE_ARRAY) 
     20          array('hydrationMode' => Doctrine::HYDRATE_ARRAY), 
     21          array('hydrationMode' => Doctrine::HYDRATE_SCALAR) 
    2122        ); 
    2223    } 
     
    7576         
    7677        $result = $hydrator->hydrateResultSet($this->_createParserResult( 
    77                 $stmt, $queryComponents, $tableAliasMap, $hydrationMode));         
    78          
    79         $this->assertEquals(2, count($result)); 
    80         $this->assertEquals(1, $result[0]['id']); 
    81         $this->assertEquals('romanb', $result[0]['name']); 
    82         $this->assertEquals(2, $result[1]['id']); 
    83         $this->assertEquals('jwage', $result[1]['name']); 
     78                $stmt, $queryComponents, $tableAliasMap, $hydrationMode)); 
     79         
     80        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     81            $this->assertEquals(2, count($result)); 
     82            $this->assertEquals(1, $result[0]['id']); 
     83            $this->assertEquals('romanb', $result[0]['name']); 
     84            $this->assertEquals(2, $result[1]['id']); 
     85            $this->assertEquals('jwage', $result[1]['name']); 
     86        } 
    8487           
    8588        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
     
    8790            $this->assertTrue($result[0] instanceof Doctrine_Entity); 
    8891            $this->assertTrue($result[1] instanceof Doctrine_Entity); 
    89         } else { 
     92        } else if ($hydrationMode == Doctrine::HYDRATE_ARRAY) { 
    9093            $this->assertTrue(is_array($result)); 
     94        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     95            $this->assertTrue(is_array($result)); 
     96            $this->assertEquals(2, count($result)); 
     97            $this->assertEquals('romanb', $result[0]['u_name']); 
     98            $this->assertEquals(1, $result[0]['u_id']); 
     99            $this->assertEquals('jwage', $result[1]['u_name']); 
     100            $this->assertEquals(2, $result[1]['u_id']); 
    91101        } 
    92102    } 
     
    161171        } 
    162172         
    163         $this->assertEquals(2, count($result)); 
    164         $this->assertTrue(is_array($result)); 
    165         $this->assertTrue(is_array($result[0])); 
    166         $this->assertTrue(is_array($result[1])); 
    167          
    168         // first user => 2 phonenumbers 
    169         $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
    170         $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
    171         // second user => 1 phonenumber 
    172         $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
    173         $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
    174          
    175         $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
    176         $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
    177         $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
     173        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     174            $this->assertEquals(2, count($result)); 
     175            $this->assertTrue(is_array($result)); 
     176            $this->assertTrue(is_array($result[0])); 
     177            $this->assertTrue(is_array($result[1])); 
     178             
     179            // first user => 2 phonenumbers 
     180            $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
     181            $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
     182            // second user => 1 phonenumber 
     183            $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
     184            $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
     185             
     186            $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
     187            $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
     188            $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
     189        } 
    178190         
    179191        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
     
    184196            $this->assertTrue($result[1][0] instanceof Doctrine_Entity); 
    185197            $this->assertTrue($result[1][0]['phonenumbers'] instanceof Doctrine_Collection); 
    186         }  
     198        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     199            $this->assertTrue(is_array($result)); 
     200            $this->assertEquals(3, count($result)); 
     201 
     202            $this->assertEquals(1, $result[0]['u_id']); 
     203            $this->assertEquals('developer', $result[0]['u_status']); 
     204            $this->assertEquals('ROMANB', $result[0]['u_nameUpper']); 
     205            $this->assertEquals(42, $result[0]['p_phonenumber']); 
     206             
     207            // ... more checks to come 
     208        } 
    187209    } 
    188210     
     
    237259                ) 
    238260            ); 
    239          
    240261             
    241262        $stmt = new Doctrine_HydratorMockStatement($resultSet); 
     
    246267        //var_dump($result); 
    247268         
    248         $this->assertEquals(2, count($result)); 
    249         $this->assertTrue(is_array($result)); 
    250         $this->assertTrue(is_array($result[0])); 
    251         $this->assertTrue(is_array($result[1])); 
    252          
    253         // first user => 2 phonenumbers 
    254         $this->assertEquals(2, $result[0]['numPhones']); 
    255         // second user => 1 phonenumber 
    256         $this->assertEquals(1, $result[1]['numPhones']); 
     269        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     270            $this->assertEquals(2, count($result)); 
     271            $this->assertTrue(is_array($result)); 
     272            $this->assertTrue(is_array($result[0])); 
     273            $this->assertTrue(is_array($result[1])); 
     274             
     275            // first user => 2 phonenumbers 
     276            $this->assertEquals(2, $result[0]['numPhones']); 
     277            // second user => 1 phonenumber 
     278            $this->assertEquals(1, $result[1]['numPhones']); 
     279        } 
    257280         
    258281        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
    259282            $this->assertTrue($result[0][0] instanceof Doctrine_Entity); 
    260283            $this->assertTrue($result[1][0] instanceof Doctrine_Entity); 
     284        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     285            $this->assertEquals(2, count($result)); 
     286             
     287            $this->assertEquals(1, $result[0]['u_id']); 
     288            $this->assertEquals('developer', $result[0]['u_status']); 
     289            $this->assertEquals(2, $result[0]['p_numPhones']); 
     290             
     291            $this->assertEquals(2, $result[1]['u_id']); 
     292            $this->assertEquals('developer', $result[1]['u_status']); 
     293            $this->assertEquals(1, $result[1]['p_numPhones']); 
    261294        } 
    262295    } 
     
    331364        } 
    332365         
    333         $this->assertEquals(2, count($result)); 
    334         $this->assertTrue(is_array($result)); 
    335         $this->assertTrue(is_array($result[0])); 
    336         $this->assertTrue(is_array($result[1])); 
    337          
    338          
    339         // first user => 2 phonenumbers. notice the custom indexing by user id 
    340         $this->assertEquals(2, count($result[0]['1']['phonenumbers'])); 
    341         // second user => 1 phonenumber. notice the custom indexing by user id 
    342         $this->assertEquals(1, count($result[1]['2']['phonenumbers'])); 
    343          
    344         // test the custom indexing of the phonenumbers 
    345         $this->assertTrue(isset($result[0]['1']['phonenumbers']['42'])); 
    346         $this->assertTrue(isset($result[0]['1']['phonenumbers']['43'])); 
    347         $this->assertTrue(isset($result[1]['2']['phonenumbers']['91'])); 
    348          
    349         // test the scalar values 
    350         $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
    351         $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
    352          
     366        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     367            $this->assertEquals(2, count($result)); 
     368            $this->assertTrue(is_array($result)); 
     369            $this->assertTrue(is_array($result[0])); 
     370            $this->assertTrue(is_array($result[1])); 
     371             
     372            // first user => 2 phonenumbers. notice the custom indexing by user id 
     373            $this->assertEquals(2, count($result[0]['1']['phonenumbers'])); 
     374            // second user => 1 phonenumber. notice the custom indexing by user id 
     375            $this->assertEquals(1, count($result[1]['2']['phonenumbers'])); 
     376             
     377            // test the custom indexing of the phonenumbers 
     378            $this->assertTrue(isset($result[0]['1']['phonenumbers']['42'])); 
     379            $this->assertTrue(isset($result[0]['1']['phonenumbers']['43'])); 
     380            $this->assertTrue(isset($result[1]['2']['phonenumbers']['91'])); 
     381             
     382            // test the scalar values 
     383            $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
     384            $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
     385        } 
     386 
    353387        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
    354388            $this->assertTrue($result[0]['1'] instanceof Doctrine_Entity); 
     
    356390            $this->assertTrue($result[0]['1']['phonenumbers'] instanceof Doctrine_Collection); 
    357391            $this->assertEquals(2, count($result[0]['1']['phonenumbers'])); 
     392        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     393            // NOTE: Indexing has no effect with HYDRATE_SCALAR 
     394            //... asserts to come 
    358395        } 
    359396    } 
     
    470507        } 
    471508         
    472         $this->assertEquals(2, count($result)); 
    473         $this->assertTrue(is_array($result)); 
    474         $this->assertTrue(is_array($result[0])); 
    475         $this->assertTrue(is_array($result[1])); 
    476          
    477         // first user => 2 phonenumbers, 2 articles 
    478         $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
    479         $this->assertEquals(2, count($result[0][0]['articles'])); 
    480         $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
    481         // second user => 1 phonenumber, 2 articles 
    482         $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
    483         $this->assertEquals(2, count($result[1][0]['articles'])); 
    484         $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
    485          
    486         $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
    487         $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
    488         $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
    489          
    490         $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); 
    491         $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); 
    492         $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); 
    493         $this->assertEquals('PHP6', $result[1][0]['articles'][1]['topic']); 
     509        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     510            $this->assertEquals(2, count($result)); 
     511            $this->assertTrue(is_array($result)); 
     512            $this->assertTrue(is_array($result[0])); 
     513            $this->assertTrue(is_array($result[1])); 
     514             
     515            // first user => 2 phonenumbers, 2 articles 
     516            $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
     517            $this->assertEquals(2, count($result[0][0]['articles'])); 
     518            $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
     519            // second user => 1 phonenumber, 2 articles 
     520            $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
     521            $this->assertEquals(2, count($result[1][0]['articles'])); 
     522            $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
     523             
     524            $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
     525            $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
     526            $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
     527             
     528            $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); 
     529            $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); 
     530            $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); 
     531            $this->assertEquals('PHP6', $result[1][0]['articles'][1]['topic']); 
     532        } 
    494533         
    495534        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
     
    506545            $this->assertTrue($result[1][0]['articles'][0] instanceof Doctrine_Entity); 
    507546            $this->assertTrue($result[1][0]['articles'][1] instanceof Doctrine_Entity); 
     547        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     548            //... 
     549            $this->assertEquals(6, count($result)); 
     550            //var_dump($result); 
    508551        } 
    509552    } 
     
    643686        } 
    644687         
    645         $this->assertEquals(2, count($result)); 
    646         $this->assertTrue(is_array($result)); 
    647         $this->assertTrue(is_array($result[0])); 
    648         $this->assertTrue(is_array($result[1])); 
    649          
    650         // first user => 2 phonenumbers, 2 articles, 1 comment on first article 
    651         $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
    652         $this->assertEquals(2, count($result[0][0]['articles'])); 
    653         $this->assertEquals(1, count($result[0][0]['articles'][0]['comments'])); 
    654         $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
    655         // second user => 1 phonenumber, 2 articles, no comments 
    656         $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
    657         $this->assertEquals(2, count($result[1][0]['articles'])); 
    658         $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
    659          
    660         $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
    661         $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
    662         $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
    663          
    664         $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); 
    665         $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); 
    666         $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); 
    667         $this->assertEquals('PHP6', $result[1][0]['articles'][1]['topic']); 
    668          
    669         $this->assertEquals('First!', $result[0][0]['articles'][0]['comments'][0]['topic']); 
     688        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     689            $this->assertEquals(2, count($result)); 
     690            $this->assertTrue(is_array($result)); 
     691            $this->assertTrue(is_array($result[0])); 
     692            $this->assertTrue(is_array($result[1])); 
     693             
     694            // first user => 2 phonenumbers, 2 articles, 1 comment on first article 
     695            $this->assertEquals(2, count($result[0][0]['phonenumbers'])); 
     696            $this->assertEquals(2, count($result[0][0]['articles'])); 
     697            $this->assertEquals(1, count($result[0][0]['articles'][0]['comments'])); 
     698            $this->assertEquals('ROMANB', $result[0]['nameUpper']); 
     699            // second user => 1 phonenumber, 2 articles, no comments 
     700            $this->assertEquals(1, count($result[1][0]['phonenumbers'])); 
     701            $this->assertEquals(2, count($result[1][0]['articles'])); 
     702            $this->assertEquals('JWAGE', $result[1]['nameUpper']); 
     703             
     704            $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); 
     705            $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); 
     706            $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); 
     707             
     708            $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); 
     709            $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); 
     710            $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); 
     711            $this->assertEquals('PHP6', $result[1][0]['articles'][1]['topic']); 
     712             
     713            $this->assertEquals('First!', $result[0][0]['articles'][0]['comments'][0]['topic']); 
     714     
     715            $this->assertTrue(isset($result[0][0]['articles'][0]['comments'])); 
     716            $this->assertFalse(isset($result[0][0]['articles'][1]['comments'])); 
     717            $this->assertFalse(isset($result[1][0]['articles'][0]['comments'])); 
     718            $this->assertFalse(isset($result[1][0]['articles'][1]['comments'])); 
     719        } 
    670720 
    671         $this->assertTrue(isset($result[0][0]['articles'][0]['comments'])); 
    672         $this->assertFalse(isset($result[0][0]['articles'][1]['comments'])); 
    673         $this->assertFalse(isset($result[1][0]['articles'][0]['comments'])); 
    674         $this->assertFalse(isset($result[1][0]['articles'][1]['comments'])); 
    675          
    676721        if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
    677722            $this->assertTrue($result[0][0] instanceof Doctrine_Entity); 
     
    692737            $this->assertTrue($result[0][0]['articles'][0]['comments'] instanceof Doctrine_Collection); 
    693738            $this->assertTrue($result[0][0]['articles'][0]['comments'][0] instanceof Doctrine_Entity); 
     739        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     740            //... 
    694741        } 
    695742    } 
     
    788835        } 
    789836         
    790         $this->assertEquals(2, count($result)); 
    791         $this->assertTrue(isset($result[0]['boards'])); 
    792         $this->assertEquals(3, count($result[0]['boards'])); 
    793         $this->assertTrue(isset($result[1]['boards'])); 
    794         $this->assertEquals(1, count($result[1]['boards'])); 
     837        if ($hydrationMode == Doctrine::HYDRATE_ARRAY || $hydrationMode == Doctrine::HYDRATE_RECORD) { 
     838            $this->assertEquals(2, count($result)); 
     839            $this->assertTrue(isset($result[0]['boards'])); 
     840            $this->assertEquals(3, count($result[0]['boards'])); 
     841            $this->assertTrue(isset($result[1]['boards'])); 
     842            $this->assertEquals(1, count($result[1]['boards'])); 
     843        } 
    795844         
    796845        if ($hydrationMode == Doctrine::HYDRATE_ARRAY) { 
     
    798847            $this->assertTrue(is_array($result[0])); 
    799848            $this->assertTrue(is_array($result[1])); 
    800         } else { 
     849        } else if ($hydrationMode == Doctrine::HYDRATE_RECORD) { 
    801850            $this->assertTrue($result instanceof Doctrine_Collection); 
    802851            $this->assertTrue($result[0] instanceof Doctrine_Entity); 
    803852            $this->assertTrue($result[1] instanceof Doctrine_Entity); 
    804         }      
     853        } else if ($hydrationMode == Doctrine::HYDRATE_SCALAR) { 
     854            //... 
     855        } 
    805856 
    806857    } 
     858     
     859     
     860     
    807861}