Failed Conditions
Pull Request — master (#6485)
by Alessandro
12:30
created

CountOutputWalkerTest::testCountQuery_GroupBy()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 7

Duplication

Lines 11
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 11
loc 11
rs 9.4285
c 1
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace Doctrine\Tests\ORM\Tools\Pagination;
4
5
use Doctrine\ORM\Query;
6
use Doctrine\ORM\Tools\Pagination\CountOutputWalker;
7
8
class CountOutputWalkerTest 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_OUTPUT_WALKER, CountOutputWalker::class);
15
        $query->setFirstResult(null)->setMaxResults(null);
16
17
        $this->assertEquals(
18
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, c1_.id AS id_1, a2_.id AS id_2, a2_.name AS name_3, b0_.author_id AS author_id_4, b0_.category_id AS category_id_5 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id) dctrn_result) dctrn_table", $query->getSQL()
19
        );
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
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
27
        $query->setFirstResult(null)->setMaxResults(null);
28
29
        $this->assertEquals(
30
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result) dctrn_table", $query->getSQL()
31
        );
32
    }
33
34 View Code Duplication
    public function testCountQuery_GroupBy(): void
35
    {
36
        $query = $this->entityManager->createQuery(
37
            'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name');
38
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
39
        $query->setFirstResult(null)->setMaxResults(null);
40
41
        $this->assertSame(
42
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_.name AS name_0 FROM Person p0_ GROUP BY p0_.name) dctrn_table", $query->getSQL()
43
        );
44
    }
45
46 View Code Duplication
    public function testCountQuery_Having(): void
47
    {
48
        $query = $this->entityManager->createQuery(
49
            'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0');
50
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
51
        $query->setFirstResult(null)->setMaxResults(null);
52
53
        $this->assertSame(
54
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT count(u0_.id) AS sclr_0, g1_.id AS id_1, u0_.id AS id_2 FROM groups g1_ LEFT JOIN user_group u2_ ON g1_.id = u2_.group_id LEFT JOIN User u0_ ON u0_.id = u2_.user_id GROUP BY g1_.id HAVING sclr_0 > 0) dctrn_table", $query->getSQL()
55
        );
56
    }
57
58
    public function testCountQueryOrderBySqlServer()
59
    {
60
        if ($this->entityManager->getConnection()->getDatabasePlatform()->getName() !== "mssql") {
61
            $this->markTestSkipped('SQLServer only test.');
62
        }
63
64
        $query = $this->entityManager->createQuery(
65
            'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id');
66
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
67
        $query->setFirstResult(null)->setMaxResults(null);
68
69
        $this->assertEquals(
70
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_) dctrn_result) dctrn_table",
71
            $query->getSQL()
72
        );
73
    }
74
}
75
76