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.
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>.
22 namespace Doctrine\Tests\ORM\Query;
24 require_once __DIR__ . '/../../TestInit.php';
27 * Test case for testing the saving and referencing of query identifiers.
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
37 class DqlGenerationTest extends \Doctrine\Tests\OrmTestCase
39 protected function setUp() {
40 $this->markTestSkipped('Not yet implemented.');
43 protected function createQuery()
45 return $this->_em->createQuery();
48 public function testSelect()
50 $query = $this->createQuery();
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
57 $query->select()->from('User u');
58 $this->assertEquals('SELECT * FROM User u', $query->getDql());
61 $query->select('u.*')->from('User u');
62 $this->assertEquals('SELECT u.* FROM User u', $query->getDql());
65 $query->select('u.id')->from('User u');
66 $this->assertEquals('SELECT u.id FROM User u', $query->getDql());
69 $query->select('u.id, u.name')->from('User u');
70 $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql());
73 $query->select('u.name AS myCustomName')->from('User u');
74 $this->assertEquals('SELECT u.name AS myCustomName FROM User u', $query->getDql());
77 $query->select('u.id')->select('u.name')->from('User u');
78 $this->assertEquals('SELECT u.id, u.name FROM User u', $query->getDql());
83 public function testSelectDistinct()
85 $query = $this->createQuery();
87 $query->select()->distinct()->from('User u');
88 $this->assertEquals('SELECT DISTINCT * FROM User u', $query->getDql());
91 $query->select('u.name')->distinct(false)->from('User u');
92 $this->assertEquals('SELECT u.name FROM User u', $query->getDql());
95 $query->select()->distinct(false)->from('User u');
96 $this->assertEquals('SELECT * FROM User u', $query->getDql());
99 $query->select('u.name')->distinct()->from('User u');
100 $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql());
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());
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());
111 $query->select('DISTINCT u.name')->from('User u');
112 $this->assertEquals('SELECT DISTINCT u.name FROM User u', $query->getDql());
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());
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());
125 public function testSelectJoin()
127 $query = $this->createQuery();
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());
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());
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());
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());
149 public function testSelectWhere()
151 $query = $this->createQuery();
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());
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());
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());
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());
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());
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());
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());
190 public function testSelectWhereIn()
192 $query = $this->createQuery();
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());
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());
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());
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());
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());
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());
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());
231 public function testDelete()
233 $query = $this->createQuery();
235 $query->setDql('DELETE CmsUser u');
236 $this->assertEquals('DELETE CmsUser u', $query->getDql());
239 $query->delete()->from('CmsUser u');
240 $this->assertEquals('DELETE FROM CmsUser u', $query->getDql());
243 $query->delete()->from('CmsUser u')->where('u.id = ?', 1);
244 $this->assertEquals('DELETE FROM CmsUser u WHERE u.id = ?', $query->getDql());
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());