QueryTest.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional;
  3. use Doctrine\DBAL\Connection;
  4. use Doctrine\Tests\Models\CMS\CmsUser,
  5. Doctrine\Tests\Models\CMS\CmsArticle;
  6. use Doctrine\ORM\Mapping\ClassMetadata;
  7. use Doctrine\ORM\Query;
  8. require_once __DIR__ . '/../../TestInit.php';
  9. /**
  10. * Functional Query tests.
  11. *
  12. * @author robo
  13. */
  14. class QueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
  15. {
  16. protected function setUp()
  17. {
  18. $this->useModelSet('cms');
  19. parent::setUp();
  20. }
  21. public function testSimpleQueries()
  22. {
  23. $user = new CmsUser;
  24. $user->name = 'Guilherme';
  25. $user->username = 'gblanco';
  26. $user->status = 'developer';
  27. $this->_em->persist($user);
  28. $this->_em->flush();
  29. $this->_em->clear();
  30. $query = $this->_em->createQuery("select u, upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'");
  31. $result = $query->getResult();
  32. $this->assertEquals(1, count($result));
  33. $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][0]);
  34. $this->assertEquals('Guilherme', $result[0][0]->name);
  35. $this->assertEquals('gblanco', $result[0][0]->username);
  36. $this->assertEquals('developer', $result[0][0]->status);
  37. $this->assertEquals('GUILHERME', $result[0][1]);
  38. $resultArray = $query->getArrayResult();
  39. $this->assertEquals(1, count($resultArray));
  40. $this->assertTrue(is_array($resultArray[0][0]));
  41. $this->assertEquals('Guilherme', $resultArray[0][0]['name']);
  42. $this->assertEquals('gblanco', $resultArray[0][0]['username']);
  43. $this->assertEquals('developer', $resultArray[0][0]['status']);
  44. $this->assertEquals('GUILHERME', $resultArray[0][1]);
  45. $scalarResult = $query->getScalarResult();
  46. $this->assertEquals(1, count($scalarResult));
  47. $this->assertEquals('Guilherme', $scalarResult[0]['u_name']);
  48. $this->assertEquals('gblanco', $scalarResult[0]['u_username']);
  49. $this->assertEquals('developer', $scalarResult[0]['u_status']);
  50. $this->assertEquals('GUILHERME', $scalarResult[0][1]);
  51. $query = $this->_em->createQuery("select upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'");
  52. $this->assertEquals('GUILHERME', $query->getSingleScalarResult());
  53. }
  54. public function testJoinQueries()
  55. {
  56. $user = new CmsUser;
  57. $user->name = 'Guilherme';
  58. $user->username = 'gblanco';
  59. $user->status = 'developer';
  60. $article1 = new CmsArticle;
  61. $article1->topic = "Doctrine 2";
  62. $article1->text = "This is an introduction to Doctrine 2.";
  63. $user->addArticle($article1);
  64. $article2 = new CmsArticle;
  65. $article2->topic = "Symfony 2";
  66. $article2->text = "This is an introduction to Symfony 2.";
  67. $user->addArticle($article2);
  68. $this->_em->persist($user);
  69. $this->_em->persist($article1);
  70. $this->_em->persist($article2);
  71. $this->_em->flush();
  72. $this->_em->clear();
  73. $query = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u join u.articles a ORDER BY a.topic");
  74. $users = $query->getResult();
  75. $this->assertEquals(1, count($users));
  76. $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
  77. $this->assertEquals(2, count($users[0]->articles));
  78. $this->assertEquals('Doctrine 2', $users[0]->articles[0]->topic);
  79. $this->assertEquals('Symfony 2', $users[0]->articles[1]->topic);
  80. }
  81. public function testUsingZeroBasedQueryParameterShouldWork()
  82. {
  83. $user = new CmsUser;
  84. $user->name = 'Jonathan';
  85. $user->username = 'jwage';
  86. $user->status = 'developer';
  87. $this->_em->persist($user);
  88. $this->_em->flush();
  89. $this->_em->clear();
  90. $q = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?0');
  91. $q->setParameter(0, 'jwage');
  92. $user = $q->getSingleResult();
  93. $this->assertNotNull($user);
  94. }
  95. public function testUsingUnknownQueryParameterShouldThrowException()
  96. {
  97. $this->setExpectedException(
  98. "Doctrine\ORM\Query\QueryException",
  99. "Invalid parameter: token 2 is not defined in the query."
  100. );
  101. $q = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = ?1');
  102. $q->setParameter(2, 'jwage');
  103. $user = $q->getSingleResult();
  104. }
  105. public function testMismatchingParamExpectedParamCount()
  106. {
  107. $this->setExpectedException(
  108. "Doctrine\ORM\Query\QueryException",
  109. "Invalid parameter number: number of bound variables does not match number of tokens"
  110. );
  111. $q = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = ?1');
  112. $q->setParameter(1, 'jwage');
  113. $q->setParameter(2, 'jwage');
  114. $user = $q->getSingleResult();
  115. }
  116. public function testInvalidInputParameterThrowsException()
  117. {
  118. $this->setExpectedException("Doctrine\ORM\Query\QueryException");
  119. $q = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = ?');
  120. $q->setParameter(1, 'jwage');
  121. $user = $q->getSingleResult();
  122. }
  123. public function testSetParameters()
  124. {
  125. $q = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = ?1 AND u.status = ?2');
  126. $q->setParameters(array(1 => 'jwage', 2 => 'active'));
  127. $users = $q->getResult();
  128. }
  129. /**
  130. * @group DDC-1070
  131. */
  132. public function testIterateResultAsArrayAndParams()
  133. {
  134. $article1 = new CmsArticle;
  135. $article1->topic = "Doctrine 2";
  136. $article1->text = "This is an introduction to Doctrine 2.";
  137. $article2 = new CmsArticle;
  138. $article2->topic = "Symfony 2";
  139. $article2->text = "This is an introduction to Symfony 2.";
  140. $this->_em->persist($article1);
  141. $this->_em->persist($article2);
  142. $this->_em->flush();
  143. $this->_em->clear();
  144. $articleId = $article1->id;
  145. $query = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.topic = ?1");
  146. $articles = $query->iterate(array(1 => 'Doctrine 2'), Query::HYDRATE_ARRAY);
  147. $found = array();
  148. foreach ($articles AS $article) {
  149. $found[] = $article;
  150. }
  151. $this->assertEquals(1, count($found));
  152. $this->assertEquals(array(
  153. array(array('id' => $articleId, 'topic' => 'Doctrine 2', 'text' => 'This is an introduction to Doctrine 2.', 'version' => 1))
  154. ), $found);
  155. }
  156. public function testIterateResult_IterativelyBuildUpUnitOfWork()
  157. {
  158. $article1 = new CmsArticle;
  159. $article1->topic = "Doctrine 2";
  160. $article1->text = "This is an introduction to Doctrine 2.";
  161. $article2 = new CmsArticle;
  162. $article2->topic = "Symfony 2";
  163. $article2->text = "This is an introduction to Symfony 2.";
  164. $this->_em->persist($article1);
  165. $this->_em->persist($article2);
  166. $this->_em->flush();
  167. $this->_em->clear();
  168. $query = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
  169. $articles = $query->iterate();
  170. $iteratedCount = 0;
  171. $topics = array();
  172. foreach($articles AS $row) {
  173. $article = $row[0];
  174. $topics[] = $article->topic;
  175. $identityMap = $this->_em->getUnitOfWork()->getIdentityMap();
  176. $identityMapCount = count($identityMap['Doctrine\Tests\Models\CMS\CmsArticle']);
  177. $this->assertTrue($identityMapCount>$iteratedCount);
  178. $iteratedCount++;
  179. }
  180. $this->assertEquals(array("Doctrine 2", "Symfony 2"), $topics);
  181. $this->assertEquals(2, $iteratedCount);
  182. $this->_em->flush();
  183. $this->_em->clear();
  184. }
  185. public function testIterateResultClearEveryCycle()
  186. {
  187. $article1 = new CmsArticle;
  188. $article1->topic = "Doctrine 2";
  189. $article1->text = "This is an introduction to Doctrine 2.";
  190. $article2 = new CmsArticle;
  191. $article2->topic = "Symfony 2";
  192. $article2->text = "This is an introduction to Symfony 2.";
  193. $this->_em->persist($article1);
  194. $this->_em->persist($article2);
  195. $this->_em->flush();
  196. $this->_em->clear();
  197. $query = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a");
  198. $articles = $query->iterate();
  199. $iteratedCount = 0;
  200. $topics = array();
  201. foreach($articles AS $row) {
  202. $article = $row[0];
  203. $topics[] = $article->topic;
  204. $this->_em->clear();
  205. $iteratedCount++;
  206. }
  207. $this->assertEquals(array("Doctrine 2", "Symfony 2"), $topics);
  208. $this->assertEquals(2, $iteratedCount);
  209. $this->_em->flush();
  210. }
  211. /**
  212. * @expectedException \Doctrine\ORM\Query\QueryException
  213. */
  214. public function testIterateResult_FetchJoinedCollection_ThrowsException()
  215. {
  216. $query = $this->_em->createQuery("SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a");
  217. $articles = $query->iterate();
  218. }
  219. /**
  220. * @expectedException Doctrine\ORM\NoResultException
  221. */
  222. public function testGetSingleResultThrowsExceptionOnNoResult()
  223. {
  224. $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a")
  225. ->getSingleResult();
  226. }
  227. /**
  228. * @expectedException Doctrine\ORM\NoResultException
  229. */
  230. public function testGetSingleScalarResultThrowsExceptionOnNoResult()
  231. {
  232. $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a")
  233. ->getSingleScalarResult();
  234. }
  235. /**
  236. * @expectedException Doctrine\ORM\NonUniqueResultException
  237. */
  238. public function testGetSingleScalarResultThrowsExceptionOnNonUniqueResult()
  239. {
  240. $user = new CmsUser;
  241. $user->name = 'Guilherme';
  242. $user->username = 'gblanco';
  243. $user->status = 'developer';
  244. $article1 = new CmsArticle;
  245. $article1->topic = "Doctrine 2";
  246. $article1->text = "This is an introduction to Doctrine 2.";
  247. $user->addArticle($article1);
  248. $article2 = new CmsArticle;
  249. $article2->topic = "Symfony 2";
  250. $article2->text = "This is an introduction to Symfony 2.";
  251. $user->addArticle($article2);
  252. $this->_em->persist($user);
  253. $this->_em->persist($article1);
  254. $this->_em->persist($article2);
  255. $this->_em->flush();
  256. $this->_em->clear();
  257. $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a")
  258. ->getSingleScalarResult();
  259. }
  260. public function testModifiedLimitQuery()
  261. {
  262. for ($i = 0; $i < 5; $i++) {
  263. $user = new CmsUser;
  264. $user->name = 'Guilherme' . $i;
  265. $user->username = 'gblanco' . $i;
  266. $user->status = 'developer';
  267. $this->_em->persist($user);
  268. }
  269. $this->_em->flush();
  270. $this->_em->clear();
  271. $data = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u')
  272. ->setFirstResult(1)
  273. ->setMaxResults(2)
  274. ->getResult();
  275. $this->assertEquals(2, count($data));
  276. $this->assertEquals('gblanco1', $data[0]->username);
  277. $this->assertEquals('gblanco2', $data[1]->username);
  278. $data = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u')
  279. ->setFirstResult(3)
  280. ->setMaxResults(2)
  281. ->getResult();
  282. $this->assertEquals(2, count($data));
  283. $this->assertEquals('gblanco3', $data[0]->username);
  284. $this->assertEquals('gblanco4', $data[1]->username);
  285. $data = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u')
  286. ->setFirstResult(3)
  287. ->setMaxResults(2)
  288. ->getScalarResult();
  289. }
  290. public function testSupportsQueriesWithEntityNamespaces()
  291. {
  292. $this->_em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS');
  293. try {
  294. $query = $this->_em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1');
  295. $this->assertEquals('UPDATE cms_users SET name = ?', $query->getSql());
  296. $query->free();
  297. } catch (\Exception $e) {
  298. $this->fail($e->getMessage());
  299. }
  300. $this->_em->getConfiguration()->setEntityNamespaces(array());
  301. }
  302. /**
  303. * @group DDC-604
  304. */
  305. public function testEntityParameters()
  306. {
  307. $article = new CmsArticle;
  308. $article->topic = "dr. dolittle";
  309. $article->text = "Once upon a time ...";
  310. $author = new CmsUser;
  311. $author->name = "anonymous";
  312. $author->username = "anon";
  313. $author->status = "here";
  314. $article->user = $author;
  315. $this->_em->persist($author);
  316. $this->_em->persist($article);
  317. $this->_em->flush();
  318. $this->_em->clear();
  319. //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
  320. $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a where a.topic = :topic and a.user = :user")
  321. ->setParameter("user", $this->_em->getReference('Doctrine\Tests\Models\CMS\CmsUser', $author->id))
  322. ->setParameter("topic", "dr. dolittle");
  323. $result = $q->getResult();
  324. $this->assertEquals(1, count($result));
  325. $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsArticle', $result[0]);
  326. $this->assertEquals("dr. dolittle", $result[0]->topic);
  327. $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $result[0]->user);
  328. $this->assertFalse($result[0]->user->__isInitialized__);
  329. }
  330. /**
  331. * @group DDC-952
  332. */
  333. public function testEnableFetchEagerMode()
  334. {
  335. for ($i = 0; $i < 10; $i++) {
  336. $article = new CmsArticle;
  337. $article->topic = "dr. dolittle";
  338. $article->text = "Once upon a time ...";
  339. $author = new CmsUser;
  340. $author->name = "anonymous";
  341. $author->username = "anon".$i;
  342. $author->status = "here";
  343. $article->user = $author;
  344. $this->_em->persist($author);
  345. $this->_em->persist($article);
  346. }
  347. $this->_em->flush();
  348. $this->_em->clear();
  349. $articles = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a')
  350. ->setFetchMode('Doctrine\Tests\Models\CMS\CmsArticle', 'user', ClassMetadata::FETCH_EAGER)
  351. ->getResult();
  352. $this->assertEquals(10, count($articles));
  353. foreach ($articles AS $article) {
  354. $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $article);
  355. }
  356. }
  357. /**
  358. * @group DDC-991
  359. */
  360. public function testgetOneOrNullResult()
  361. {
  362. $user = new CmsUser;
  363. $user->name = 'Guilherme';
  364. $user->username = 'gblanco';
  365. $user->status = 'developer';
  366. $this->_em->persist($user);
  367. $this->_em->flush();
  368. $this->_em->clear();
  369. $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'");
  370. $fetchedUser = $query->getOneOrNullResult();
  371. $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $fetchedUser);
  372. $this->assertEquals('gblanco', $fetchedUser->username);
  373. $query = $this->_em->createQuery("select u.username from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'");
  374. $fetchedUsername = $query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR);
  375. $this->assertEquals('gblanco', $fetchedUsername);
  376. }
  377. /**
  378. * @group DDC-991
  379. */
  380. public function testgetOneOrNullResultSeveralRows()
  381. {
  382. $user = new CmsUser;
  383. $user->name = 'Guilherme';
  384. $user->username = 'gblanco';
  385. $user->status = 'developer';
  386. $this->_em->persist($user);
  387. $user = new CmsUser;
  388. $user->name = 'Roman';
  389. $user->username = 'romanb';
  390. $user->status = 'developer';
  391. $this->_em->persist($user);
  392. $this->_em->flush();
  393. $this->_em->clear();
  394. $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u");
  395. $this->setExpectedException('Doctrine\ORM\NonUniqueResultException');
  396. $fetchedUser = $query->getOneOrNullResult();
  397. }
  398. /**
  399. * @group DDC-991
  400. */
  401. public function testgetOneOrNullResultNoRows()
  402. {
  403. $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u");
  404. $this->assertNull($query->getOneOrNullResult());
  405. $query = $this->_em->createQuery("select u.username from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'");
  406. $this->assertNull($query->getOneOrNullResult(Query::HYDRATE_SCALAR));
  407. }
  408. /**
  409. * @group DBAL-171
  410. */
  411. public function testParameterOrder()
  412. {
  413. $user1 = new CmsUser;
  414. $user1->name = 'Benjamin';
  415. $user1->username = 'beberlei';
  416. $user1->status = 'developer';
  417. $this->_em->persist($user1);
  418. $user2 = new CmsUser;
  419. $user2->name = 'Roman';
  420. $user2->username = 'romanb';
  421. $user2->status = 'developer';
  422. $this->_em->persist($user2);
  423. $user3 = new CmsUser;
  424. $user3->name = 'Jonathan';
  425. $user3->username = 'jwage';
  426. $user3->status = 'developer';
  427. $this->_em->persist($user3);
  428. $this->_em->flush();
  429. $this->_em->clear();
  430. $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.status = :a AND u.id IN (:b)");
  431. $query->setParameters(array(
  432. 'b' => array($user1->id, $user2->id, $user3->id),
  433. 'a' => 'developer',
  434. ));
  435. $result = $query->getResult();
  436. $this->assertEquals(3, count($result));
  437. }
  438. public function testDqlWithAutoInferOfParameters()
  439. {
  440. $user = new CmsUser;
  441. $user->name = 'Benjamin';
  442. $user->username = 'beberlei';
  443. $user->status = 'developer';
  444. $this->_em->persist($user);
  445. $user = new CmsUser;
  446. $user->name = 'Roman';
  447. $user->username = 'romanb';
  448. $user->status = 'developer';
  449. $this->_em->persist($user);
  450. $user = new CmsUser;
  451. $user->name = 'Jonathan';
  452. $user->username = 'jwage';
  453. $user->status = 'developer';
  454. $this->_em->persist($user);
  455. $this->_em->flush();
  456. $this->_em->clear();
  457. $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username IN (?0)");
  458. $query->setParameter(0, array('beberlei', 'jwage'));
  459. $users = $query->execute();
  460. $this->assertEquals(2, count($users));
  461. }
  462. public function testQueryBuilderWithStringWhereClauseContainingOrAndConditionalPrimary()
  463. {
  464. $qb = $this->_em->createQueryBuilder();
  465. $qb->select('u')
  466. ->from('Doctrine\Tests\Models\CMS\CmsUser', 'u')
  467. ->innerJoin('u.articles', 'a')
  468. ->where('(u.id = 0) OR (u.id IS NULL)');
  469. $query = $qb->getQuery();
  470. $users = $query->execute();
  471. $this->assertEquals(0, count($users));
  472. }
  473. public function testQueryWithArrayOfEntitiesAsParameter()
  474. {
  475. $userA = new CmsUser;
  476. $userA->name = 'Benjamin';
  477. $userA->username = 'beberlei';
  478. $userA->status = 'developer';
  479. $this->_em->persist($userA);
  480. $userB = new CmsUser;
  481. $userB->name = 'Roman';
  482. $userB->username = 'romanb';
  483. $userB->status = 'developer';
  484. $this->_em->persist($userB);
  485. $userC = new CmsUser;
  486. $userC->name = 'Jonathan';
  487. $userC->username = 'jwage';
  488. $userC->status = 'developer';
  489. $this->_em->persist($userC);
  490. $this->_em->flush();
  491. $this->_em->clear();
  492. $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u IN (?0) OR u.username = ?1");
  493. $query->setParameter(0, array($userA, $userC));
  494. $query->setParameter(1, 'beberlei');
  495. $users = $query->execute();
  496. $this->assertEquals(2, count($users));
  497. }
  498. public function testQueryWithHiddenAsSelectExpression()
  499. {
  500. $userA = new CmsUser;
  501. $userA->name = 'Benjamin';
  502. $userA->username = 'beberlei';
  503. $userA->status = 'developer';
  504. $this->_em->persist($userA);
  505. $userB = new CmsUser;
  506. $userB->name = 'Roman';
  507. $userB->username = 'romanb';
  508. $userB->status = 'developer';
  509. $this->_em->persist($userB);
  510. $userC = new CmsUser;
  511. $userC->name = 'Jonathan';
  512. $userC->username = 'jwage';
  513. $userC->status = 'developer';
  514. $this->_em->persist($userC);
  515. $this->_em->flush();
  516. $this->_em->clear();
  517. $query = $this->_em->createQuery("SELECT u, (SELECT COUNT(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) AS HIDDEN total FROM Doctrine\Tests\Models\CMS\CmsUser u");
  518. $users = $query->execute();
  519. $this->assertEquals(3, count($users));
  520. $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $users[0]);
  521. }
  522. /**
  523. * @group DDC-1651
  524. */
  525. public function testSetParameterBindingSingleIdentifierObjectConverted()
  526. {
  527. $userC = new CmsUser;
  528. $userC->name = 'Jonathan';
  529. $userC->username = 'jwage';
  530. $userC->status = 'developer';
  531. $this->_em->persist($userC);
  532. $this->_em->flush();
  533. $this->_em->clear();
  534. $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1");
  535. $q->setParameter(1, $userC);
  536. $this->assertEquals($userC->id, $q->getParameter(1));
  537. }
  538. }