Changeset 1616

Show
Ignore:
Timestamp:
06/02/08 18:36:36 (4 months ago)
Author:
mikey
Message:

enable overruling of orderBy

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinder.php

    r1615 r1616  
    108108     * @param   stubCriterion             $criterion 
    109109     * @param   string                    $entityClass  entity class to find instances of 
     110     * @param   string                    $orderBy      optional  overrule default order of entity 
    110111     * @return  stubDatabaseFinderResult  list of instances of $entityClass found with $criterion 
    111112     * @throws  stubPersistenceException 
    112113     */ 
    113     public function findByCriterion(stubCriterion $criterion, stubBaseReflectionClass $entityClass
     114    public function findByCriterion(stubCriterion $criterion, stubBaseReflectionClass $entityClass, $orderBy = null
    114115    { 
    115116        if ($entityClass->hasAnnotation('Entity') === false) { 
     
    118119         
    119120        $setterMethodHelper = new stubSetterMethodHelper($entityClass); 
    120         $data               = $this->fetchData($entityClass, $setterMethodHelper, $criterion); 
     121        $data               = $this->fetchData($entityClass, $setterMethodHelper, $criterion, null, $orderBy); 
    121122        $finderResult       = new stubDatabaseFinderResult($entityClass, $data, $setterMethodHelper); 
    122123        return $finderResult; 
     
    127128     * 
    128129     * @param   string                    $entityClass  entity class to find instances of 
     130     * @param   string                    $orderBy      optional  overrule default order of entity 
    129131     * @return  stubDatabaseFinderResult  list of instances of $entityClass found 
    130132     * @throws  stubPersistenceException 
    131133     */ 
    132     public function findAll(stubBaseReflectionClass $entityClass
     134    public function findAll(stubBaseReflectionClass $entityClass, $orderBy = null
    133135    { 
    134136        if ($entityClass->hasAnnotation('Entity') === false) { 
     
    137139         
    138140        $setterMethodHelper = new stubSetterMethodHelper($entityClass); 
    139         $data               = $this->fetchData($entityClass, $setterMethodHelper); 
     141        $data               = $this->fetchData($entityClass, $setterMethodHelper, null, null, $orderBy); 
    140142        $finderResult       = new stubDatabaseFinderResult($entityClass, $data, $setterMethodHelper); 
    141143        return $finderResult; 
     
    149151     * @param   stubCriterion            $criterion           optional 
    150152     * @param   array                    $primaryKeys         optional 
     153     * @param   string                   $orderBy             optional  overrule default order of entity 
    151154     * @return  array 
    152155     * @throws  stubDatabaseFinderException 
    153156     */ 
    154     protected function fetchData(stubBaseReflectionClass $entityClass, stubSetterMethodHelper $setterMethodHelper, stubCriterion $criterion = null, array $primaryKeys = null
     157    protected function fetchData(stubBaseReflectionClass $entityClass, stubSetterMethodHelper $setterMethodHelper, stubCriterion $criterion = null, array $primaryKeys = null, $orderBy = null
    155158    { 
    156159        $select = $this->createSelect($entityClass, $setterMethodHelper, ((null === $primaryKeys) ? (array()) : ($primaryKeys))); 
     
    159162        } 
    160163         
    161         $entityAnnotation = $entityClass->getAnnotation('Entity'); 
    162         if ($entityAnnotation->hasDefaultOrder() === true) { 
    163             $select->orderBy($entityAnnotation->getDefaultOrder()); 
     164        if (null !== $orderBy) { 
     165            $select->orderBy($orderBy); 
     166        } else { 
     167            $entityAnnotation = $entityClass->getAnnotation('Entity'); 
     168            if ($entityAnnotation->hasDefaultOrder() === true) { 
     169                $select->orderBy($entityAnnotation->getDefaultOrder()); 
     170            } 
    164171        } 
    165172         
  • trunk/src/test/php/net/stubbles/rdbms/persistence/finder/stubDatabaseFinderTestCase.php

    r1615 r1616  
    197197 
    198198    /** 
     199     * test that finding data of an object with a criterion works as expected 
     200     * 
     201     * @test 
     202     */ 
     203    public function byCriterionOverruleOrderBy() 
     204    { 
     205        $mockCriterion = $this->getMock('stubCriterion'); 
     206        $mockCriterion->expects($this->any())->method('toSQL')->will($this->returnValue('example')); 
     207        $mockResult = $this->getMock('stubDatabaseResult'); 
     208        $this->mockConnection->expects($this->any())->method('query')->will($this->returnValue($mockResult)); 
     209        $mockResult->expects($this->once()) 
     210                   ->method('fetchAll') 
     211                   ->will($this->returnValue(array(array('bar' => 'Here is bar.', 'default' => 'And this is default.')))); 
     212        $finderResult = $this->dbFinder->findByCriterion($mockCriterion, new stubReflectionClass('MockSinglePrimaryKeyEntity'), 'blub DESC'); 
     213        $this->assertEquals(1, $finderResult->count()); 
     214        $data = $finderResult->current(); 
     215        $this->assertEquals('Here is bar.', $data->withAnnotation()); 
     216        $this->assertEquals('And this is default.', $data->withDefaultValue()); 
     217        $select = $this->mockQueryBuilder->getSelect(); 
     218        $this->assertEquals('foo', $select->getBaseTableName()); 
     219        $this->assertEquals('blub DESC', $select->getOrderedBy()); 
     220        $this->assertTrue($select->hasCriterion()); 
     221    } 
     222 
     223    /** 
    199224     * test that finding data for all instances of an object works as expected 
    200225     * 
     
    220245        $this->assertFalse($select->hasCriterion()); 
    221246    } 
     247 
     248    /** 
     249     * test that finding data for all instances of an object works as expected 
     250     * 
     251     * @test 
     252     */ 
     253    public function findAllOverruleOrderBy() 
     254    { 
     255        $mockResult = $this->getMock('stubDatabaseResult'); 
     256        $this->mockConnection->expects($this->any())->method('query')->will($this->returnValue($mockResult)); 
     257        $mockResult->expects($this->once()) 
     258                   ->method('fetchAll') 
     259                   ->will($this->returnValue(array(array('bar' => 'Here is bar.', 'default' => 'And this is default.')))); 
     260        $finderResult = $this->dbFinder->findAll(new stubReflectionClass('MockSinglePrimaryKeyEntity'), 'blub DESC'); 
     261        $this->assertEquals(1, $finderResult->count()); 
     262        $data = $finderResult->current(); 
     263        $this->assertEquals('Here is bar.', $data->withAnnotation()); 
     264        $this->assertEquals('And this is default.', $data->withDefaultValue()); 
     265        $select = $this->mockQueryBuilder->getSelect(); 
     266        $this->assertEquals('foo', $select->getBaseTableName()); 
     267        $this->assertEquals('blub DESC', $select->getOrderedBy()); 
     268        $this->assertFalse($select->hasCriterion()); 
     269    } 
    222270} 
    223271?>