Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Tools / Pagination / CountWalkerTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Tools\Pagination;
4
5 use Doctrine\ORM\Query;
6 use Doctrine\ORM\Tools\Pagination\CountWalker;
7
8 /**
9  * @group DDC-1613
10  */
11 class CountWalkerTest extends PaginationTestCase
12 {
13     public function testCountQuery()
14     {
15         $query = $this->entityManager->createQuery(
16             'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a');
17         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
18         $query->setHint(CountWalker::HINT_DISTINCT, true);
19         $query->setFirstResult(null)->setMaxResults(null);
20
21         $this->assertEquals(
22             "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()
23         );
24     }
25
26     public function testCountQuery_MixedResultsWithName()
27     {
28         $query = $this->entityManager->createQuery(
29             'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a');
30         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
31         $query->setHint(CountWalker::HINT_DISTINCT, true);
32         $query->setFirstResult(null)->setMaxResults(null);
33
34         $this->assertEquals(
35             "SELECT count(DISTINCT a0_.id) AS sclr0 FROM Author a0_", $query->getSql()
36         );
37     }
38
39     public function testCountQuery_KeepsGroupBy()
40     {
41         $query = $this->entityManager->createQuery(
42             'SELECT b FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost b GROUP BY b.id');
43         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
44         $query->setHint(CountWalker::HINT_DISTINCT, true);
45         $query->setFirstResult(null)->setMaxResults(null);
46
47         $this->assertEquals(
48             "SELECT count(DISTINCT b0_.id) AS sclr0 FROM BlogPost b0_ GROUP BY b0_.id", $query->getSql()
49         );
50     }
51
52     public function testCountQuery_RemovesOrderBy()
53     {
54         $query = $this->entityManager->createQuery(
55             'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a ORDER BY a.name');
56         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
57         $query->setHint(CountWalker::HINT_DISTINCT, true);
58         $query->setFirstResult(null)->setMaxResults(null);
59
60         $this->assertEquals(
61             "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()
62         );
63     }
64
65     public function testCountQuery_RemovesLimits()
66     {
67         $query = $this->entityManager->createQuery(
68             'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a');
69         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
70         $query->setHint(CountWalker::HINT_DISTINCT, true);
71         $query->setFirstResult(null)->setMaxResults(null);
72
73         $this->assertEquals(
74             "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()
75         );
76     }
77
78     public function testCountQuery_HavingException()
79     {
80         $query = $this->entityManager->createQuery(
81             "SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0"
82         );
83         $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
84         $query->setFirstResult(null)->setMaxResults(null);
85
86         $this->setExpectedException(
87             'RuntimeException',
88             'Cannot count query that uses a HAVING clause. Use the output walkers for pagination'
89         );
90
91         $query->getSql();
92     }
93 }
94