WhereInWalkerTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace Doctrine\Tests\ORM\Tools\Pagination;
  3. use Doctrine\ORM\Query;
  4. use Doctrine\ORM\Tools\Pagination\WhereInWalker;
  5. /**
  6. * @group DDC-1613
  7. */
  8. class WhereInWalkerTest extends PaginationTestCase
  9. {
  10. public function testWhereInQuery_NoWhere()
  11. {
  12. $query = $this->entityManager->createQuery(
  13. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g'
  14. );
  15. $whereInQuery = clone $query;
  16. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  17. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  18. $this->assertEquals(
  19. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  20. );
  21. }
  22. public function testCountQuery_MixedResultsWithName()
  23. {
  24. $query = $this->entityManager->createQuery(
  25. 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a'
  26. );
  27. $whereInQuery = clone $query;
  28. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  29. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  30. $this->assertEquals(
  31. "SELECT a0_.id AS id0, a0_.name AS name1, sum(a0_.name) AS sclr2 FROM Author a0_ WHERE a0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  32. );
  33. }
  34. public function testWhereInQuery_SingleWhere()
  35. {
  36. $query = $this->entityManager->createQuery(
  37. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g WHERE 1 = 1'
  38. );
  39. $whereInQuery = clone $query;
  40. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  41. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  42. $this->assertEquals(
  43. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  44. );
  45. }
  46. public function testWhereInQuery_MultipleWhereWithAnd()
  47. {
  48. $query = $this->entityManager->createQuery(
  49. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g WHERE 1 = 1 AND 2 = 2'
  50. );
  51. $whereInQuery = clone $query;
  52. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  53. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  54. $this->assertEquals(
  55. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND 2 = 2 AND u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  56. );
  57. }
  58. public function testWhereInQuery_MultipleWhereWithOr()
  59. {
  60. $query = $this->entityManager->createQuery(
  61. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g WHERE 1 = 1 OR 2 = 2'
  62. );
  63. $whereInQuery = clone $query;
  64. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  65. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  66. $this->assertEquals(
  67. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  68. );
  69. }
  70. public function testWhereInQuery_MultipleWhereWithMixed_1()
  71. {
  72. $query = $this->entityManager->createQuery(
  73. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g WHERE (1 = 1 OR 2 = 2) AND 3 = 3'
  74. );
  75. $whereInQuery = clone $query;
  76. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  77. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  78. $this->assertEquals(
  79. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  80. );
  81. }
  82. public function testWhereInQuery_MultipleWhereWithMixed_2()
  83. {
  84. $query = $this->entityManager->createQuery(
  85. 'SELECT u, g FROM Doctrine\Tests\ORM\Tools\Pagination\User u JOIN u.groups g WHERE 1 = 1 AND 2 = 2 OR 3 = 3'
  86. );
  87. $whereInQuery = clone $query;
  88. $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\WhereInWalker'));
  89. $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10);
  90. $this->assertEquals(
  91. "SELECT u0_.id AS id0, g1_.id AS id1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND u0_.id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $whereInQuery->getSql()
  92. );
  93. }
  94. }