Ticket #1195: 1195TestCase.php

File 1195TestCase.php, 2.9 KB (added by stefan, 6 months ago)
Line 
1<?php
2/*
3 * Created on Jul 01, 2008
4 *
5 * by Stefan Klug ( stefan.klug (at) gmail.com )
6 */
7
8class Doctrine_Ticket_1195_TestCase extends Doctrine_UnitTestCase
9{
10        public function prepareTables()
11    {
12        $this->tables = array();
13        $this->tables[] = 'T1195_Item';
14        $this->tables[] = 'T1195_Ref';
15
16        parent :: prepareTables();
17    }
18
19    public function prepareData()
20    {
21        $item = new T1195_Item();
22        $item->col1 = "a";
23        $item->col2 = "a";
24        $item->save();
25
26        $item = new T1195_Item();
27        $item->col1 = "a";
28        $item->col2 = "b";
29        $item->save();
30
31        $item = new T1195_Item();
32        $item->col1 = "b";
33        $item->col2 = "a";
34        $item->save();
35
36        $item = new T1195_Item();
37        $item->col1 = "b";
38        $item->col2 = "b";
39        $item->save();
40
41        $ref = new T1195_Ref();
42        $ref->Item = $item;
43        $ref->save();
44
45        $ref = new T1195_Ref();
46        $ref->Item = $item;
47        $ref->save();
48
49    }
50
51    public function testRawSQLaddWhere()
52    {
53        //this checks for an error in parseDqlQueryPart
54
55        $query = new Doctrine_RawSql();
56        $q = $query->select('{i.*}')
57                                ->addComponent('i', 'T1195_Item i')
58                                ->from('items i')
59                                ->addWhere('i.col1 = ?','a')
60                                ->addWhere('i.col2 = ?','a');
61
62                $res = $q->execute();
63
64        $this->assertEqual($res->count(), 1);
65    }
66
67    public function testRawSQLDistinct()
68    {
69        $q = new Doctrine_RawSql();
70        $q = $q->select('{i.*}')
71                                ->addComponent('i', 'T1195_Item i')
72                                ->from('ref r')
73                                ->leftJoin('items i ON r.item_id=i.id');
74
75
76                $res = $q->execute(array(),Doctrine::HYDRATE_ARRAY);
77                $this->assertEqual(sizeof($res), 2);
78
79                $q->distinct();
80                $res = $q->execute(array(),Doctrine::HYDRATE_ARRAY);
81                $this->assertEqual(sizeof($res), 1);
82    }
83
84        public function testRawSQLCount()
85    {
86        $q = new Doctrine_RawSql();
87        $q = $q->select('{i.*}')
88                                ->addComponent('i', 'T1195_Item i')
89                                ->from('items i');
90
91                if(!method_exists( $q, 'count' ))
92                {
93                        $this->fail("The query doesn't have a count() method");
94                        return;
95                }
96
97                $res = $q->count();
98                $this->assertEqual($res, 4);
99
100    }
101}
102
103class T1195_Item extends Doctrine_Record
104{
105    public function setTableDefinition()
106    {
107        $this->setTableName('items');
108        $this->hasColumn('id', 'integer', null, array('autoincrement' => true, 'primary' => true, 'notnull' => true));
109        $this->hasColumn('col1', 'string', 10);
110        $this->hasColumn('col2', 'string', 10);
111    }
112}
113
114class T1195_Ref extends Doctrine_Record
115{
116    public function setTableDefinition()
117    {
118        $this->setTableName('ref');
119        $this->hasColumn('id', 'integer', null, array('autoincrement' => true, 'primary' => true, 'notnull' => true));
120        $this->hasColumn('item_id', 'integer', null);
121    }
122
123    public function setUp()
124    {
125        $this->hasOne('T1195_Item as Item', array('local' => 'item_id', 'foreign' => 'id'));
126    }
127}