Fix CountOutputWalker for queries with GROUP BY
This commit is contained in:
parent
9c2b54b748
commit
b2ac8fdfd7
@ -85,6 +85,14 @@ class CountOutputWalker extends SqlWalker
|
|||||||
|
|
||||||
$sql = parent::walkSelectStatement($AST);
|
$sql = parent::walkSelectStatement($AST);
|
||||||
|
|
||||||
|
if ($AST->groupByClause) {
|
||||||
|
return sprintf(
|
||||||
|
'SELECT %s AS dctrn_count FROM (%s) dctrn_table',
|
||||||
|
$this->platform->getCountExpression('*'),
|
||||||
|
$sql
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Find out the SQL alias of the identifier column of the root entity
|
// Find out the SQL alias of the identifier column of the root entity
|
||||||
// It may be possible to make this work with multiple root entities but that
|
// It may be possible to make this work with multiple root entities but that
|
||||||
// would probably require issuing multiple queries or doing a UNION SELECT
|
// would probably require issuing multiple queries or doing a UNION SELECT
|
||||||
|
@ -30,6 +30,18 @@ class CountOutputWalkerTest extends PaginationTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCountQuery_GroupBy()
|
||||||
|
{
|
||||||
|
$query = $this->entityManager->createQuery(
|
||||||
|
'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name');
|
||||||
|
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
||||||
|
$query->setFirstResult(null)->setMaxResults(null);
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
"SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_.name AS name_0 FROM Person p0_ GROUP BY p0_.name) dctrn_table", $query->getSQL()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function testCountQuery_Having()
|
public function testCountQuery_Having()
|
||||||
{
|
{
|
||||||
$query = $this->entityManager->createQuery(
|
$query = $this->entityManager->createQuery(
|
||||||
@ -37,8 +49,8 @@ class CountOutputWalkerTest extends PaginationTestCase
|
|||||||
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
||||||
$query->setFirstResult(null)->setMaxResults(null);
|
$query->setFirstResult(null)->setMaxResults(null);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertSame(
|
||||||
"SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_1 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_result) dctrn_table", $query->getSql()
|
"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()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user