ColumnAliasTestCase.php 5.15 KB
Newer Older
zYne's avatar
zYne committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<?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
19
 * <http://www.phpdoctrine.org>.
zYne's avatar
zYne committed
20 21 22 23 24 25 26 27 28
 */

/**
 * Doctrine_ColumnAlias_TestCase
 *
 * @package     Doctrine
 * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @category    Object Relational Mapping
29
 * @link        www.phpdoctrine.org
zYne's avatar
zYne committed
30 31 32 33 34 35
 * @since       1.0
 * @version     $Revision$
 */
class Doctrine_ColumnAlias_TestCase extends Doctrine_UnitTestCase 
{
    public function prepareData() 
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
    {
        $book1 = new Book();
        $book1->name = 'Das Boot';
        $book1->save();
        
        $record1 = new ColumnAliasTest();
        $record1->alias1 = 'first';
        $record1->alias2 = 123;
        $record1->anotherField = 'camelCase';
        $record1->bookId = $book1->id;
        $record1->save();
        
        $record2 = new ColumnAliasTest();
        $record2->alias1 = 'one';
        $record2->alias2 = 456;
        $record2->anotherField = 'KoQ';
        $record2->save();
        
        $record2->anotherField = 'foo';
    }
    
zYne's avatar
zYne committed
57
    public function prepareTables()
zYne's avatar
zYne committed
58
    { 
59
        $this->tables = array('ColumnAliasTest', 'Book');
zYne's avatar
zYne committed
60 61 62
        
        parent::prepareTables();
    }
zYne's avatar
zYne committed
63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
    public function testAliasesAreSupportedForJoins()
    {
        $q = new Doctrine_Query();
        $q->select('c.*, b.name')->from('ColumnAliasTest c')
                ->innerJoin('c.book b')
                ->where('c.anotherField = ?', 'camelCase');
        $result = $q->execute();
        $this->assertTrue(isset($result[0]->book));
        $this->assertEqual($result[0]->book->name, 'Das Boot');
    }
    
    public function testAliasesAreSupportedForArrayFetching()
    {
        $q = new Doctrine_Query();
        $q->select('c.*, b.name')->from('ColumnAliasTest c')
                ->innerJoin('c.book b')
                ->where('c.anotherField = ?', 'camelCase')
                ->setHydrationMode(Doctrine::HYDRATE_ARRAY);
        $result = $q->execute();
        $this->assertEqual($result[0]['alias1'], 'first');
        $this->assertEqual($result[0]['alias2'], 123);
        $this->assertEqual($result[0]['anotherField'], 'camelCase');
        $this->assertTrue(isset($result[0]['book']));
        $this->assertEqual($result[0]['book']['name'], 'Das Boot');
    }

zYne's avatar
zYne committed
90 91 92 93 94 95 96 97 98
    public function testAliasesAreSupportedForRecordPropertyAccessors()
    {
        $record = new ColumnAliasTest;
        try {
            $record->alias1 = 'someone';
            $record->alias2 = 187;
            
            $this->assertEqual($record->alias1, 'someone');
            $this->assertEqual($record->alias2, 187);
99
        } catch (Doctrine_Record_Exception $e) {
zYne's avatar
zYne committed
100 101 102
            $this->fail();
        }
    }
103
    
zYne's avatar
zYne committed
104 105 106
    public function testAliasesAreSupportedForDqlSelectPart()
    {
        $q = new Doctrine_Query();
107
        $q->select('c.alias1, c.alias2, c.anotherField')->from('ColumnAliasTest c');
zYne's avatar
zYne committed
108
        $coll = $q->execute();
zYne's avatar
zYne committed
109

110 111 112
        $this->assertEqual($coll[0]->alias1, 'first');
        $this->assertEqual($coll[0]->alias2, 123);
        $this->assertEqual($coll[0]->anotherField, 'camelCase');
zYne's avatar
zYne committed
113
    }
114
    
zYne's avatar
zYne committed
115 116 117 118
    public function testAliasesAreSupportedForDqlWherePart()
    {
        $q = new Doctrine_Query();

119
        $q->select('c.alias1, c.alias2, c.anotherField')
zYne's avatar
zYne committed
120
          ->from('ColumnAliasTest c')
121
          ->where('c.anotherField = ?');
zYne's avatar
zYne committed
122

123
        $coll = $q->execute(array('KoQ'));
zYne's avatar
zYne committed
124

125 126 127
        $this->assertEqual($coll[0]->alias1, 'one');
        $this->assertEqual($coll[0]->alias2, 456);
        $this->assertEqual($coll[0]->anotherField, 'KoQ');
zYne's avatar
zYne committed
128
    }
129
    
130 131 132 133
    public function testAliasesAreSupportedForDqlAggregateFunctions()
    {
        $q = new Doctrine_Query();

134
        $q->select('MAX(c.alias2)')->from('ColumnAliasTest c');
135 136

        $coll = $q->execute();
zYne's avatar
zYne committed
137

138
        $this->assertEqual($coll[0]->MAX, 456);
139
    }
140
    
141 142 143 144
    public function testAliasesAreSupportedForDqlHavingPart()
    {
        $q = new Doctrine_Query();

145
        $q->select('c.alias2')
146
          ->from('ColumnAliasTest c')
147 148
          ->groupby('c.id')
          ->having('c.alias2 > 123');
149 150 151

        $coll = $q->execute();
        
152
        $this->assertEqual($coll[0]->alias2, 456);
153
    }
zYne's avatar
zYne committed
154
}
155