Failed Conditions
Push — master ( b79b26...e149f8 )
by Guilherme
64:11
created

testLimitSubqueryWithSortFunction()   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
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 0
dl 11
loc 11
rs 9.4285
1
<?php
2
3
namespace Doctrine\Tests\ORM\Tools\Pagination;
4
5
use Doctrine\ORM\Query;
6
use Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker;
7
8
/**
9
 * @group DDC-1613
10
 */
11
class LimitSubqueryWalkerTest extends PaginationTestCase
12
{
13 View Code Duplication
    public function testLimitSubquery()
14
    {
15
        $dql        = 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN p.category c JOIN p.author a';
16
        $query      = $this->entityManager->createQuery($dql);
17
        $limitQuery = clone $query;
18
19
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
20
21
        $this->assertEquals(
22
            "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id",
23
            $limitQuery->getSQL()
24
        );
25
    }
26
27 View Code Duplication
    public function testLimitSubqueryWithSort()
28
    {
29
        $dql        = 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN p.category c JOIN p.author a ORDER BY p.title';
30
        $query      = $this->entityManager->createQuery($dql);
31
        $limitQuery = clone $query;
32
33
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
34
35
        $this->assertEquals(
36
            "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id ORDER BY m0_.title ASC",
37
            $limitQuery->getSQL()
38
        );
39
    }
40
41 View Code Duplication
    public function testLimitSubqueryWithSortFunction()
42
    {
43
        $dql        = 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN p.category c GROUP BY p.id ORDER BY COUNT(c.id)';
44
        $query      = $this->entityManager->createQuery($dql);
45
        $limitQuery = clone $query;
46
47
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
48
49
        $this->assertEquals(
50
            "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id GROUP BY m0_.id ORDER BY COUNT(c1_.id) ASC",
51
            $limitQuery->getSQL()
52
        );
53
    }
54
55
56 View Code Duplication
    public function testCountQuery_MixedResultsWithName()
57
    {
58
        $dql        = 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a';
59
        $query      = $this->entityManager->createQuery($dql);
60
        $limitQuery = clone $query;
61
62
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
63
64
        $this->assertEquals(
65
            "SELECT DISTINCT a0_.id AS id_0 FROM Author a0_",
66
            $limitQuery->getSQL()
67
        );
68
    }
69
70 View Code Duplication
    public function testAggQuery_MixedResultsWithNameAndSort()
71
    {
72
        $dql        = 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC';
73
        $query      = $this->entityManager->createQuery($dql);
74
        $limitQuery = clone $query;
75
76
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
77
78
        $this->assertEquals(
79
            "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1 FROM Author a0_ ORDER BY sclr_1 DESC",
80
            $limitQuery->getSQL()
81
        );
82
    }
83
84 View Code Duplication
    public function testAggQuery_MultipleMixedResultsWithSort()
85
    {
86
        $dql        = 'SELECT a, sum(a.name) as foo, (SELECT count(subA.id) FROM Doctrine\Tests\ORM\Tools\Pagination\Author subA WHERE subA.id = a.id ) as bar FROM Doctrine\Tests\ORM\Tools\Pagination\Author a ORDER BY foo DESC, bar ASC';
87
        $query      = $this->entityManager->createQuery($dql);
88
        $limitQuery = clone $query;
89
90
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
91
92
        $this->assertEquals(
93
            "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1, (SELECT count(a1_.id) AS sclr_3 FROM Author a1_ WHERE a1_.id = a0_.id) AS sclr_2 FROM Author a0_ ORDER BY sclr_1 DESC, sclr_2 ASC",
94
            $limitQuery->getSQL()
95
        );
96
    }
97
98
    /**
99
     * @group DDC-2890
100
     */
101 View Code Duplication
    public function testLimitSubqueryWithSortOnAssociation()
102
    {
103
        $dql        = 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p ORDER BY p.author';
104
        $query      = $this->entityManager->createQuery($dql);
105
        $limitQuery = clone $query;
106
107
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
108
109
        $this->assertEquals(
110
            "SELECT DISTINCT m0_.id AS id_0, m0_.author_id AS sclr_1 FROM MyBlogPost m0_ ORDER BY m0_.author_id ASC",
111
            $limitQuery->getSQL()
112
        );
113
    }
114
115
    /**
116
     * Arbitrary Join
117
     */
118 View Code Duplication
     public function testLimitSubqueryWithArbitraryJoin()
119
    {
120
        $dql        = 'SELECT p, c FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN Doctrine\Tests\ORM\Tools\Pagination\Category c WITH p.category = c';
121
        $query      = $this->entityManager->createQuery($dql);
122
        $limitQuery = clone $query;
123
124
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
125
126
        $this->assertEquals(
127
            "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id)",
128
            $limitQuery->getSQL()
129
        );
130
    }
131
132 View Code Duplication
    public function testLimitSubqueryWithSortWithArbitraryJoin()
133
    {
134
        $dql        = 'SELECT p, c FROM Doctrine\Tests\ORM\Tools\Pagination\MyBlogPost p JOIN Doctrine\Tests\ORM\Tools\Pagination\Category c WITH p.category = c ORDER BY p.title';
135
        $query      = $this->entityManager->createQuery($dql);
136
        $limitQuery = clone $query;
137
138
        $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]);
139
140
        $this->assertEquals(
141
            "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id) ORDER BY m0_.title ASC",
142
            $limitQuery->getSQL()
143
        );
144
    }
145
}
146
147