3 namespace Doctrine\Tests\ORM\Functional;
5 use Doctrine\Common\Collections\ArrayCollection;
7 use Doctrine\ORM\Query\ResultSetMapping;
8 use Doctrine\ORM\Query\ResultSetMappingBuilder;
9 use Doctrine\ORM\Query\Parameter;
11 use Doctrine\Tests\Models\CMS\CmsUser;
12 use Doctrine\Tests\Models\CMS\CmsPhonenumber;
13 use Doctrine\Tests\Models\CMS\CmsAddress;
14 use Doctrine\Tests\Models\CMS\CmsEmail;
15 use Doctrine\Tests\Models\CMS\CmsArticle;
16 use Doctrine\Tests\Models\Company\CompanyFixContract;
17 use Doctrine\Tests\Models\Company\CompanyEmployee;
18 use Doctrine\Tests\Models\Company\CompanyPerson;
20 require_once __DIR__ . '/../../TestInit.php';
27 class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
29 private $platform = null;
31 protected function setUp() {
32 $this->useModelSet('cms');
33 $this->useModelSet('company');
35 $this->platform = $this->_em->getConnection()->getDatabasePlatform();
38 public function testBasicNativeQuery()
41 $user->name = 'Roman';
42 $user->username = 'romanb';
43 $user->status = 'dev';
44 $this->_em->persist($user);
49 $rsm = new ResultSetMapping;
50 $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
51 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id');
52 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name');
54 $query = $this->_em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm);
55 $query->setParameter(1, 'romanb');
57 $users = $query->getResult();
59 $this->assertEquals(1, count($users));
60 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
61 $this->assertEquals('Roman', $users[0]->name);
64 public function testBasicNativeQueryWithMetaResult()
67 $user->name = 'Roman';
68 $user->username = 'romanb';
69 $user->status = 'dev';
71 $addr = new CmsAddress;
72 $addr->country = 'germany';
74 $addr->city = 'Berlin';
77 $user->setAddress($addr);
79 $this->_em->persist($user);
84 $rsm = new ResultSetMapping;
85 $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsAddress', 'a');
86 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('id'), 'id');
87 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('country'), 'country');
88 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip');
89 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city');
90 $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id');
92 $query = $this->_em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm);
93 $query->setParameter(1, $addr->id);
95 $addresses = $query->getResult();
97 $this->assertEquals(1, count($addresses));
98 $this->assertTrue($addresses[0] instanceof CmsAddress);
99 $this->assertEquals($addr->country, $addresses[0]->country);
100 $this->assertEquals($addr->zip, $addresses[0]->zip);
101 $this->assertEquals($addr->city, $addresses[0]->city);
102 $this->assertEquals($addr->street, $addresses[0]->street);
103 $this->assertTrue($addresses[0]->user instanceof CmsUser);
106 public function testJoinedOneToManyNativeQuery()
109 $user->name = 'Roman';
110 $user->username = 'romanb';
111 $user->status = 'dev';
113 $phone = new CmsPhonenumber;
114 $phone->phonenumber = 424242;
116 $user->addPhonenumber($phone);
118 $this->_em->persist($user);
123 $rsm = new ResultSetMapping;
124 $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
125 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id');
126 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name');
127 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('status'), 'status');
128 $rsm->addJoinedEntityResult('Doctrine\Tests\Models\CMS\CmsPhonenumber', 'p', 'u', 'phonenumbers');
129 $rsm->addFieldResult('p', $this->platform->getSQLResultCasing('phonenumber'), 'phonenumber');
131 $query = $this->_em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm);
132 $query->setParameter(1, 'romanb');
134 $users = $query->getResult();
135 $this->assertEquals(1, count($users));
136 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
137 $this->assertEquals('Roman', $users[0]->name);
138 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $users[0]->getPhonenumbers());
139 $this->assertTrue($users[0]->getPhonenumbers()->isInitialized());
140 $this->assertEquals(1, count($users[0]->getPhonenumbers()));
141 $phones = $users[0]->getPhonenumbers();
142 $this->assertEquals(424242, $phones[0]->phonenumber);
143 $this->assertTrue($phones[0]->getUser() === $users[0]);
147 public function testJoinedOneToOneNativeQuery()
150 $user->name = 'Roman';
151 $user->username = 'romanb';
152 $user->status = 'dev';
154 $addr = new CmsAddress;
155 $addr->country = 'germany';
157 $addr->city = 'Berlin';
160 $user->setAddress($addr);
162 $this->_em->persist($user);
168 $rsm = new ResultSetMapping;
169 $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
170 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id');
171 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name');
172 $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('status'), 'status');
173 $rsm->addJoinedEntityResult('Doctrine\Tests\Models\CMS\CmsAddress', 'a', 'u', 'address');
174 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('a_id'), 'id');
175 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('country'), 'country');
176 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip');
177 $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city');
179 $query = $this->_em->createNativeQuery('SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm);
180 $query->setParameter(1, 'romanb');
182 $users = $query->getResult();
184 $this->assertEquals(1, count($users));
185 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
186 $this->assertEquals('Roman', $users[0]->name);
187 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $users[0]->getPhonenumbers());
188 $this->assertFalse($users[0]->getPhonenumbers()->isInitialized());
189 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddress', $users[0]->getAddress());
190 $this->assertTrue($users[0]->getAddress()->getUser() == $users[0]);
191 $this->assertEquals('germany', $users[0]->getAddress()->getCountry());
192 $this->assertEquals(10827, $users[0]->getAddress()->getZipCode());
193 $this->assertEquals('Berlin', $users[0]->getAddress()->getCity());
196 public function testFluentInterface()
198 $parameters = new ArrayCollection;
199 $parameters->add(new Parameter(1, 'foo'));
200 $parameters->add(new Parameter(2, 'bar'));
202 $rsm = new ResultSetMapping;
204 $q = $this->_em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm);
205 $q2 = $q->setSql('foo', $rsm)
206 ->setResultSetMapping($rsm)
207 ->expireResultCache(true)
208 ->setHint('foo', 'bar')
209 ->setParameter(1, 'foo')
210 ->setParameters($parameters)
211 ->setResultCacheDriver(null)
212 ->setResultCacheLifetime(3500);
214 $this->assertSame($q, $q2);
217 public function testJoinedOneToManyNativeQueryWithRSMBuilder()
220 $user->name = 'Roman';
221 $user->username = 'romanb';
222 $user->status = 'dev';
224 $phone = new CmsPhonenumber;
225 $phone->phonenumber = 424242;
227 $user->addPhonenumber($phone);
229 $this->_em->persist($user);
234 $rsm = new ResultSetMappingBuilder($this->_em);
235 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsUser', 'u');
236 $rsm->addJoinedEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber', 'p', 'u', 'phonenumbers');
237 $query = $this->_em->createNativeQuery('SELECT u.*, p.* FROM cms_users u LEFT JOIN cms_phonenumbers p ON u.id = p.user_id WHERE username = ?', $rsm);
238 $query->setParameter(1, 'romanb');
240 $users = $query->getResult();
241 $this->assertEquals(1, count($users));
242 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
243 $this->assertEquals('Roman', $users[0]->name);
244 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $users[0]->getPhonenumbers());
245 $this->assertTrue($users[0]->getPhonenumbers()->isInitialized());
246 $this->assertEquals(1, count($users[0]->getPhonenumbers()));
247 $phones = $users[0]->getPhonenumbers();
248 $this->assertEquals(424242, $phones[0]->phonenumber);
249 $this->assertTrue($phones[0]->getUser() === $users[0]);
253 $rsm = new ResultSetMappingBuilder($this->_em);
254 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber', 'p');
255 $query = $this->_em->createNativeQuery('SELECT p.* FROM cms_phonenumbers p WHERE p.phonenumber = ?', $rsm);
256 $query->setParameter(1, $phone->phonenumber);
257 $phone = $query->getSingleResult();
259 $this->assertNotNull($phone->getUser());
260 $this->assertEquals($user->name, $phone->getUser()->getName());
263 public function testJoinedOneToOneNativeQueryWithRSMBuilder()
266 $user->name = 'Roman';
267 $user->username = 'romanb';
268 $user->status = 'dev';
270 $addr = new CmsAddress;
271 $addr->country = 'germany';
273 $addr->city = 'Berlin';
276 $user->setAddress($addr);
278 $this->_em->persist($user);
284 $rsm = new ResultSetMappingBuilder($this->_em);
285 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsUser', 'u');
286 $rsm->addJoinedEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', 'a', 'u', 'address', array('id' => 'a_id'));
288 $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm);
289 $query->setParameter(1, 'romanb');
291 $users = $query->getResult();
293 $this->assertEquals(1, count($users));
294 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
295 $this->assertEquals('Roman', $users[0]->name);
296 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $users[0]->getPhonenumbers());
297 $this->assertFalse($users[0]->getPhonenumbers()->isInitialized());
298 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddress', $users[0]->getAddress());
299 $this->assertTrue($users[0]->getAddress()->getUser() == $users[0]);
300 $this->assertEquals('germany', $users[0]->getAddress()->getCountry());
301 $this->assertEquals(10827, $users[0]->getAddress()->getZipCode());
302 $this->assertEquals('Berlin', $users[0]->getAddress()->getCity());
306 $rsm = new ResultSetMappingBuilder($this->_em);
307 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', 'a');
308 $query = $this->_em->createNativeQuery('SELECT a.* FROM cms_addresses a WHERE a.id = ?', $rsm);
309 $query->setParameter(1, $addr->getId());
310 $address = $query->getSingleResult();
312 $this->assertNotNull($address->getUser());
313 $this->assertEquals($user->name, $address->getUser()->getName());
317 * @expectedException \InvalidArgumentException
319 public function testRSMBuilderThrowsExceptionOnColumnConflict()
321 $rsm = new ResultSetMappingBuilder($this->_em);
322 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsUser', 'u');
323 $rsm->addJoinedEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', 'a', 'u', 'address');
329 public function testUnknownParentAliasThrowsException()
331 $rsm = new ResultSetMappingBuilder($this->_em);
332 $rsm->addRootEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsUser', 'u');
333 $rsm->addJoinedEntityFromClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', 'a', 'un', 'address', array('id' => 'a_id'));
335 $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm);
336 $query->setParameter(1, 'romanb');
338 $this->setExpectedException(
339 "Doctrine\ORM\Internal\Hydration\HydrationException",
340 "The parent object of entity result with alias 'a' was not found. The parent alias is 'un'."
342 $users = $query->getResult();
349 public function testBasicNativeNamedQueryWithSqlResultSetMapping()
352 $user->name = 'Fabio B. Silva';
353 $user->username = 'FabioBatSilva';
354 $user->status = 'dev';
356 $addr = new CmsAddress;
357 $addr->country = 'Brazil';
359 $addr->city = 'São Paulo';
361 $user->setAddress($addr);
364 $this->_em->persist($user);
370 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsAddress');
371 $query = $repository->createNativeNamedQuery('find-all');
372 $result = $query->getResult();
374 $this->assertCount(1, $result);
375 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddress', $result[0]);
376 $this->assertEquals($addr->id, $result[0]->id);
377 $this->assertEquals($addr->city, $result[0]->city);
378 $this->assertEquals($addr->country, $result[0]->country);
384 public function testBasicNativeNamedQueryWithResultClass()
387 $user->name = 'Fabio B. Silva';
388 $user->username = 'FabioBatSilva';
389 $user->status = 'dev';
391 $email = new CmsEmail();
392 $email->email = 'fabio.bat.silva@gmail.com';
394 $user->setEmail($email);
397 $this->_em->persist($user);
402 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
405 $result = $repository->createNativeNamedQuery('fetchIdAndUsernameWithResultClass')
406 ->setParameter(1, 'FabioBatSilva')->getResult();
408 $this->assertEquals(1, count($result));
409 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0]);
410 $this->assertNull($result[0]->name);
411 $this->assertNull($result[0]->email);
412 $this->assertEquals($user->id, $result[0]->id);
413 $this->assertEquals('FabioBatSilva', $result[0]->username);
418 $result = $repository->createNativeNamedQuery('fetchAllColumns')
419 ->setParameter(1, 'FabioBatSilva')->getResult();
421 $this->assertEquals(1, count($result));
422 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0]);
423 $this->assertEquals($user->id, $result[0]->id);
424 $this->assertEquals('Fabio B. Silva', $result[0]->name);
425 $this->assertEquals('FabioBatSilva', $result[0]->username);
426 $this->assertEquals('dev', $result[0]->status);
427 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsEmail', $result[0]->email);
434 public function testJoinedOneToOneNativeNamedQueryWithResultSetMapping()
437 $user->name = 'Fabio B. Silva';
438 $user->username = 'FabioBatSilva';
439 $user->status = 'dev';
441 $addr = new CmsAddress;
442 $addr->country = 'Brazil';
444 $addr->city = 'São Paulo';
447 $user->setAddress($addr);
449 $this->_em->persist($user);
454 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
457 $result = $repository->createNativeNamedQuery('fetchJoinedAddress')
458 ->setParameter(1, 'FabioBatSilva')->getResult();
460 $this->assertEquals(1, count($result));
461 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0]);
462 $this->assertEquals('Fabio B. Silva', $result[0]->name);
463 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $result[0]->getPhonenumbers());
464 $this->assertFalse($result[0]->getPhonenumbers()->isInitialized());
465 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddress', $result[0]->getAddress());
466 $this->assertTrue($result[0]->getAddress()->getUser() == $result[0]);
467 $this->assertEquals('Brazil', $result[0]->getAddress()->getCountry());
468 $this->assertEquals(10827, $result[0]->getAddress()->getZipCode());
469 $this->assertEquals('São Paulo', $result[0]->getAddress()->getCity());
475 public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping()
478 $user->name = 'Fabio B. Silva';
479 $user->username = 'FabioBatSilva';
480 $user->status = 'dev';
482 $phone = new CmsPhonenumber;
483 $phone->phonenumber = 424242;
485 $user->addPhonenumber($phone);
487 $this->_em->persist($user);
492 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
494 $result = $repository->createNativeNamedQuery('fetchJoinedPhonenumber')
495 ->setParameter(1, 'FabioBatSilva')->getResult();
497 $this->assertEquals(1, count($result));
498 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0]);
499 $this->assertEquals('Fabio B. Silva', $result[0]->name);
500 $this->assertInstanceOf('Doctrine\ORM\PersistentCollection', $result[0]->getPhonenumbers());
501 $this->assertTrue($result[0]->getPhonenumbers()->isInitialized());
502 $this->assertEquals(1, count($result[0]->getPhonenumbers()));
503 $phones = $result[0]->getPhonenumbers();
504 $this->assertEquals(424242, $phones[0]->phonenumber);
505 $this->assertTrue($phones[0]->getUser() === $result[0]);
511 public function testMixedNativeNamedQueryNormalJoin()
513 $user1 = new CmsUser;
514 $user1->name = 'Fabio B. Silva';
515 $user1->username = 'FabioBatSilva';
516 $user1->status = 'dev';
518 $user2 = new CmsUser;
519 $user2->name = 'test tester';
520 $user2->username = 'test';
521 $user2->status = 'tester';
523 $phone1 = new CmsPhonenumber;
524 $phone2 = new CmsPhonenumber;
525 $phone3 = new CmsPhonenumber;
526 $phone1->phonenumber = 11111111;
527 $phone2->phonenumber = 22222222;
528 $phone3->phonenumber = 33333333;
530 $user1->addPhonenumber($phone1);
531 $user1->addPhonenumber($phone2);
532 $user2->addPhonenumber($phone3);
534 $this->_em->persist($user1);
535 $this->_em->persist($user2);
540 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
542 $result = $repository->createNativeNamedQuery('fetchUserPhonenumberCount')
543 ->setParameter(1, array('test','FabioBatSilva'))->getResult();
545 $this->assertEquals(2, count($result));
546 $this->assertTrue(is_array($result[0]));
547 $this->assertTrue(is_array($result[1]));
549 // first user => 2 phonenumbers
550 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][0]);
551 $this->assertEquals('Fabio B. Silva', $result[0][0]->name);
552 $this->assertEquals(2, $result[0]['numphones']);
554 // second user => 1 phonenumbers
555 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[1][0]);
556 $this->assertEquals('test tester', $result[1][0]->name);
557 $this->assertEquals(1, $result[1]['numphones']);
563 public function testNativeNamedQueryInheritance()
565 $person = new CompanyPerson;
566 $person->setName('Fabio B. Silva');
568 $employee = new CompanyEmployee;
569 $employee->setName('Fabio Silva');
570 $employee->setSalary(100000);
571 $employee->setDepartment('IT');
573 $this->_em->persist($person);
574 $this->_em->persist($employee);
579 $repository = $this->_em->getRepository('Doctrine\Tests\Models\Company\CompanyPerson');
581 $result = $repository->createNativeNamedQuery('fetchAllWithSqlResultSetMapping')
584 $this->assertEquals(2, count($result));
585 $this->assertInstanceOf('Doctrine\Tests\Models\Company\CompanyPerson', $result[0]);
586 $this->assertInstanceOf('Doctrine\Tests\Models\Company\CompanyEmployee', $result[1]);
587 $this->assertTrue(is_numeric($result[0]->getId()));
588 $this->assertTrue(is_numeric($result[1]->getId()));
589 $this->assertEquals('Fabio B. Silva', $result[0]->getName());
590 $this->assertEquals('Fabio Silva', $result[1]->getName());
596 $result = $repository->createNativeNamedQuery('fetchAllWithResultClass')
599 $this->assertEquals(2, count($result));
600 $this->assertInstanceOf('Doctrine\Tests\Models\Company\CompanyPerson', $result[0]);
601 $this->assertInstanceOf('Doctrine\Tests\Models\Company\CompanyEmployee', $result[1]);
602 $this->assertTrue(is_numeric($result[0]->getId()));
603 $this->assertTrue(is_numeric($result[1]->getId()));
604 $this->assertEquals('Fabio B. Silva', $result[0]->getName());
605 $this->assertEquals('Fabio Silva', $result[1]->getName());
610 * DQL : SELECT u, a, COUNT(p) AS numphones FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.address a JOIN u.phonenumbers p
612 public function testMultipleEntityResults()
616 $user->name = 'Fabio B. Silva';
617 $user->username = 'FabioBatSilva';
618 $user->status = 'dev';
620 $addr = new CmsAddress;
621 $addr->country = 'Brazil';
623 $addr->city = 'São Paulo';
625 $phone = new CmsPhonenumber;
626 $phone->phonenumber = 424242;
629 $user->setAddress($addr);
630 $user->addPhonenumber($phone);
634 $this->_em->persist($user);
640 $repository = $this->_em->getRepository('Doctrine\Tests\Models\CMS\CmsUser');
641 $query = $repository->createNativeNamedQuery('fetchMultipleJoinsEntityResults');
642 $result = $query->getResult();
645 $this->assertEquals(1, count($result));
646 $this->assertTrue(is_array($result[0]));
648 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][0]);
649 $this->assertEquals('Fabio B. Silva', $result[0][0]->name);
650 $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsAddress', $result[0][0]->getAddress());
651 $this->assertTrue($result[0][0]->getAddress()->getUser() == $result[0][0]);
652 $this->assertEquals('Brazil', $result[0][0]->getAddress()->getCountry());
653 $this->assertEquals(10827, $result[0][0]->getAddress()->getZipCode());
655 $this->assertEquals(1, $result[0]['numphones']);
662 public function testNamedNativeQueryInheritance()
664 $contractMetadata = $this->_em->getClassMetadata('Doctrine\Tests\Models\Company\CompanyContract');
665 $flexMetadata = $this->_em->getClassMetadata('Doctrine\Tests\Models\Company\CompanyFlexContract');
667 $contractQueries = $contractMetadata->getNamedNativeQueries();
668 $flexQueries = $flexMetadata->getNamedNativeQueries();
670 $contractMappings = $contractMetadata->getSqlResultSetMappings();
671 $flexMappings = $flexMetadata->getSqlResultSetMappings();
675 $this->assertEquals('all-contracts', $contractQueries['all-contracts']['name']);
676 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyContract', $contractQueries['all-contracts']['resultClass']);
678 $this->assertEquals('all', $contractQueries['all']['name']);
679 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyContract', $contractQueries['all']['resultClass']);
682 // flex contract queries
683 $this->assertEquals('all-contracts', $flexQueries['all-contracts']['name']);
684 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexQueries['all-contracts']['resultClass']);
686 $this->assertEquals('all-flex', $flexQueries['all-flex']['name']);
687 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexQueries['all-flex']['resultClass']);
689 $this->assertEquals('all', $flexQueries['all']['name']);
690 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexQueries['all']['resultClass']);
693 // contract result mapping
694 $this->assertEquals('mapping-all-contracts', $contractMappings['mapping-all-contracts']['name']);
695 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyContract', $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']);
697 $this->assertEquals('mapping-all', $contractMappings['mapping-all']['name']);
698 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyContract', $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']);
700 // flex contract result mapping
701 $this->assertEquals('mapping-all-contracts', $flexMappings['mapping-all-contracts']['name']);
702 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexMappings['mapping-all-contracts']['entities'][0]['entityClass']);
704 $this->assertEquals('mapping-all', $flexMappings['mapping-all']['name']);
705 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexMappings['mapping-all']['entities'][0]['entityClass']);
707 $this->assertEquals('mapping-all-flex', $flexMappings['mapping-all-flex']['name']);
708 $this->assertEquals('Doctrine\Tests\Models\Company\CompanyFlexContract', $flexMappings['mapping-all-flex']['entities'][0]['entityClass']);