Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Criteria / DqlGenerationTest.php
1 <?php
2 /*
3  *  $Id$
4  *
5  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16  *
17  * This software consists of voluntary contributions made by many individuals
18  * and is licensed under the LGPL. For more information, see
19  * <http://www.doctrine-project.org>.
20  */
21
22 namespace Doctrine\Tests\ORM\Query;
23
24 require_once __DIR__ . '/../../TestInit.php';
25
26 /**
27  * Test case for testing the saving and referencing of query identifiers.
28  *
29  * @author      Guilherme Blanco <guilhermeblanco@hotmail.com>
30  * @author      Janne Vanhala <jpvanhal@cc.hut.fi>
31  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
32  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
33  * @link        http://www.doctrine-project.org
34  * @since       2.0
35  * @version     $Revision$
36  */
37 class DqlGenerationTest extends \Doctrine\Tests\OrmTestCase
38 {
39     protected function setUp() {
40         $this->markTestSkipped('Not yet implemented.');
41     }
42
43     protected function createQuery()
44     {
45         return $this->_em->createQuery();
46     }
47
48     public function testSelect()
49     {
50         $query = $this->createQuery();
51
52         // select and from
53         $query->setDql('FROM User u');
54         $this->assertEquals('FROM User u', $query->getDql()); // Internally we use SELECT * FROM User u to process the DQL
55         $query->free();
56
57         $query->select()->from('User u');
58         $this->assertEquals('SELECT * FROM User u', $query->getDql());
59         $query->free();
60
61         $query->select('u.*')->from('User u');
62         $this->assertEquals('SELECT u.* FROM User u', $query->getDql());
63         $query->free();
64
65         $query->select('u.id')->from('User u');
66         $this->assertEquals('SELECT u.id FROM User u', $query->getDql());
67         $query->free();
68
69         $query->select('u.id, u.name')->from('User u');
70         $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql());
71         $query->free();
72
73         $query->select('u.name AS myCustomName')->from('User u');
74         $this->assertEquals('SELECT u.name AS myCustomName FROM User u', $query->getDql());
75         $query->free();
76
77         $query->select('u.id')->select('u.name')->from('User u');
78         $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql());
79         $query->free();
80     }
81
82
83     public function testSelectDistinct()
84     {
85         $query = $this->createQuery();
86
87         $query->select()->distinct()->from('User u');
88         $this->assertEquals('SELECT DISTINCT * FROM User u', $query->getDql());
89         $query->free();
90
91         $query->select('u.name')->distinct(false)->from('User u');
92         $this->assertEquals('SELECT u.name FROM User u', $query->getDql());
93         $query->free();
94
95         $query->select()->distinct(false)->from('User u');
96         $this->assertEquals('SELECT * FROM User u', $query->getDql());
97         $query->free();
98
99         $query->select('u.name')->distinct()->from('User u');
100         $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql());
101         $query->free();
102
103         $query->select('u.name, u.email')->distinct()->from('User u');
104         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql());
105         $query->free();
106
107         $query->select('u.name')->select('u.email')->distinct()->from('User u');
108         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql());
109         $query->free();
110
111         $query->select('DISTINCT u.name')->from('User u');
112         $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql());
113         $query->free();
114
115         $query->select('DISTINCT u.name, u.email')->from('User u');
116         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql());
117         $query->free();
118
119         $query->select('DISTINCT u.name')->select('u.email')->from('User u');
120         $this->assertEquals('SELECT DISTINCT u.name, u.email FROM User u', $query->getDql());
121         $query->free();
122     }
123
124
125     public function testSelectJoin()
126     {
127         $query = $this->createQuery();
128
129         $query->select('u.*')->from('User u')->join('u.Group g')->where('g.id = ?', 1);
130         $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $query->getDql());
131         $this->assertEquals(array(1), $query->getParams());
132         $query->free();
133
134         $query->select('u.*')->from('User u')->innerJoin('u.Group g')->where('g.id = ?', 1);
135         $this->assertEquals('SELECT u.* FROM User u INNER JOIN u.Group g WHERE g.id = ?', $query->getDql());
136         $this->assertEquals(array(1), $query->getParams());
137         $query->free();
138
139         $query->select('u.*')->from('User u')->leftJoin('u.Group g')->where('g.id IS NULL');
140         $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.Group g WHERE g.id IS NULL', $query->getDql());
141         $query->free();
142
143         $query->select('u.*')->from('User u')->leftJoin('u.UserGroup ug')->leftJoin('ug.Group g')->where('g.name = ?', 'admin');
144         $this->assertEquals('SELECT u.* FROM User u LEFT JOIN u.UserGroup ug LEFT JOIN ug.Group g WHERE g.name = ?', $query->getDql());
145         $query->free();
146     }
147
148
149     public function testSelectWhere()
150     {
151         $query = $this->createQuery();
152
153         $query->select('u.name')->from('User u')->where('u.id = ?', 1);
154         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ?', $query->getDql());
155         $this->assertEquals(array(1), $query->getParams());
156         $query->free();
157
158         $query->select('u.name')->from('User u')->where('u.id = ? AND u.type != ?', array(1, 'admin'));
159         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $query->getDql());
160         $this->assertEquals(array(1, 'admin'), $query->getParams());
161         $query->free();
162
163         $query->select('u.name')->from('User u')->where('u.id = ?', 1)->andWhere('u.type != ?', 'admin');
164         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ?', $query->getDql());
165         $this->assertEquals(array(1, 'admin'), $query->getParams());
166         $query->free();
167
168         $query->select('u.name')->from('User u')->where('( u.id = ?', 1)->andWhere('u.type != ? )', 'admin');
169         $this->assertEquals('SELECT u.name FROM User u WHERE ( u.id = ? AND u.type != ? )', $query->getDql());
170         $this->assertEquals(array(1, 'admin'), $query->getParams());
171         $query->free();
172
173         $query->select('u.name')->from('User u')->where('u.id = ? OR u.type != ?', array(1, 'admin'));
174         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $query->getDql());
175         $this->assertEquals(array(1, 'admin'), $query->getParams());
176         $query->free();
177
178         $query->select('u.name')->from('User u')->where('u.id = ?', 1)->orWhere('u.type != ?', 'admin');
179         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? OR u.type != ?', $query->getDql());
180         $this->assertEquals(array(1, 'admin'), $query->getParams());
181         $query->free();
182
183         $query->select('u.name')->from('User u')->andwhere('u.id = ?', 1)->andWhere('u.type != ?', 'admin')->orWhere('u.email = ?', 'admin@localhost');
184         $this->assertEquals('SELECT u.name FROM User u WHERE u.id = ? AND u.type != ? OR u.email = ?', $query->getDql());
185         $this->assertEquals(array(1, 'admin', 'admin@localhost'), $query->getParams());
186         $query->free();
187     }
188
189
190     public function testSelectWhereIn()
191     {
192         $query = $this->createQuery();
193
194         $query->select('u.name')->from('User u')->whereIn('u.id', array(1, 2, 3, 4, 5));
195         $this->assertEquals('SELECT u.name FROM User u WHERE u.id IN (?, ?, ?, ?, ?)', $query->getDql());
196         $this->assertEquals(array(1, 2, 3, 4, 5), $query->getParams());
197         $query->free();
198
199         $query->select('u.name')->from('User u')->whereNotIn('u.id', array(1, 2, 3));
200         $this->assertEquals('SELECT u.name FROM User u WHERE u.id NOT IN (?, ?, ?)', $query->getDql());
201         $this->assertEquals(array(1, 2, 3), $query->getParams());
202         $query->free();
203
204         $query->select('u.name')->from('User u')->where('u.type = ?', 'admin')->andWhereIn('u.id', array(1, 2));
205         $this->assertEquals('SELECT u.name FROM User u WHERE u.type = ? AND u.id IN (?, ?)', $query->getDql());
206         $this->assertEquals(array('admin', 1, 2), $query->getParams());
207         $query->free();
208
209         $query->select('u.name')->from('User u')->where('u.type = ?', 'admin')->andWhereNotIn('u.id', array(1, 2));
210         $this->assertEquals('SELECT u.name FROM User u WHERE u.type = ? AND u.id NOT IN (?, ?)', $query->getDql());
211         $this->assertEquals(array('admin', 1, 2), $query->getParams());
212         $query->free();
213
214         $query->select('u.name')->from('User u')->whereIn('u.type', array('admin', 'moderator'))->andWhereNotIn('u.id', array(1, 2, 3, 4));
215         $this->assertEquals('SELECT u.name FROM User u WHERE u.type IN (?, ?) AND u.id NOT IN (?, ?, ?, ?)', $query->getDql());
216         $this->assertEquals(array('admin', 'moderator', 1, 2, 3, 4), $query->getParams());
217         $query->free();
218
219         $query->select('u.name')->from('User u')->whereIn('u.type', array('admin', 'moderator'))->orWhereIn('u.id', array(1, 2, 3, 4));
220         $this->assertEquals('SELECT u.name FROM User u WHERE u.type IN (?, ?) OR u.id IN (?, ?, ?, ?)', $query->getDql());
221         $this->assertEquals(array('admin', 'moderator', 1, 2, 3, 4), $query->getParams());
222         $query->free();
223
224         $query->select('u.name')->from('User u')->whereIn('u.type', array('admin', 'moderator'))->andWhereNotIn('u.id', array(1, 2))->orWhereNotIn('u.type', array('admin', 'moderator'))->andWhereNotIn('u.email', array('user@localhost', 'guest@localhost'));
225         $this->assertEquals('SELECT u.name FROM User u WHERE u.type IN (?, ?) AND u.id NOT IN (?, ?) OR u.type NOT IN (?, ?) AND u.email NOT IN (?, ?)', $query->getDql());
226         $this->assertEquals(array('admin', 'moderator', 1, 2, 'admin', 'moderator', 'user@localhost', 'guest@localhost'), $query->getParams());
227         $query->free();
228     }
229
230
231     public function testDelete()
232     {
233         $query = $this->createQuery();
234
235         $query->setDql('DELETE CmsUser u');
236         $this->assertEquals('DELETE CmsUser u', $query->getDql());
237         $query->free();
238
239         $query->delete()->from('CmsUser u');
240         $this->assertEquals('DELETE FROM CmsUser u', $query->getDql());
241         $query->free();
242
243         $query->delete()->from('CmsUser u')->where('u.id = ?', 1);
244         $this->assertEquals('DELETE FROM CmsUser u WHERE u.id = ?', $query->getDql());
245         $query->free();
246
247         $query->delete()->from('CmsUser u')->where('u.username = ?', 'gblanco')->orWhere('u.name = ?', 'Guilherme');
248         $this->assertEquals('DELETE FROM CmsUser u WHERE u.username = ? OR u.name = ?', $query->getDql());
249         $query->free();
250     }
251
252 }