CountWalkerTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Doctrine\Tests\ORM\Tools\Pagination;
  3. use Doctrine\ORM\Query;
  4. use Doctrine\ORM\Tools\Pagination\CountWalker;
  5. /**
  6. * @group DDC-1613
  7. */
  8. class CountWalkerTest extends PaginationTestCase
  9. {
  10. public function testCountQuery()
  11. {
  12. $query = $this->entityManager->createQuery(
  13. 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a');
  14. $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
  15. $query->setHint(CountWalker::HINT_DISTINCT, true);
  16. $query->setFirstResult(null)->setMaxResults(null);
  17. $this->assertEquals(
  18. "SELECT count(DISTINCT b0_.id) AS sclr0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSql()
  19. );
  20. }
  21. public function testCountQuery_MixedResultsWithName()
  22. {
  23. $query = $this->entityManager->createQuery(
  24. 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a');
  25. $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
  26. $query->setHint(CountWalker::HINT_DISTINCT, true);
  27. $query->setFirstResult(null)->setMaxResults(null);
  28. $this->assertEquals(
  29. "SELECT count(DISTINCT a0_.id) AS sclr0 FROM Author a0_", $query->getSql()
  30. );
  31. }
  32. public function testCountQuery_KeepsGroupBy()
  33. {
  34. $query = $this->entityManager->createQuery(
  35. 'SELECT b FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost b GROUP BY b.id');
  36. $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
  37. $query->setHint(CountWalker::HINT_DISTINCT, true);
  38. $query->setFirstResult(null)->setMaxResults(null);
  39. $this->assertEquals(
  40. "SELECT count(DISTINCT b0_.id) AS sclr0 FROM BlogPost b0_ GROUP BY b0_.id", $query->getSql()
  41. );
  42. }
  43. public function testCountQuery_RemovesOrderBy()
  44. {
  45. $query = $this->entityManager->createQuery(
  46. 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a ORDER BY a.name');
  47. $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
  48. $query->setHint(CountWalker::HINT_DISTINCT, true);
  49. $query->setFirstResult(null)->setMaxResults(null);
  50. $this->assertEquals(
  51. "SELECT count(DISTINCT b0_.id) AS sclr0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSql()
  52. );
  53. }
  54. public function testCountQuery_RemovesLimits()
  55. {
  56. $query = $this->entityManager->createQuery(
  57. 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a');
  58. $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
  59. $query->setHint(CountWalker::HINT_DISTINCT, true);
  60. $query->setFirstResult(null)->setMaxResults(null);
  61. $this->assertEquals(
  62. "SELECT count(DISTINCT b0_.id) AS sclr0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSql()
  63. );
  64. }
  65. }