[DDC-2282] Fix pagination problem with SQL Server.
ORDER BY removed from all count queries when on SQL Server Fixed SQLServer ORDER BY problem in paginator CountOutputWalker Added test to check query with ORDER BY and SQLServerPlatform
This commit is contained in:
parent
d5dd7d6f8a
commit
6a69b4700c
@ -79,6 +79,10 @@ class CountOutputWalker extends SqlWalker
|
||||
*/
|
||||
public function walkSelectStatement(SelectStatement $AST)
|
||||
{
|
||||
if ($this->platform->getName() === "mssql") {
|
||||
$AST->orderByClause = null;
|
||||
}
|
||||
|
||||
$sql = parent::walkSelectStatement($AST);
|
||||
|
||||
// Find out the SQL alias of the identifier column of the root entity
|
||||
|
@ -41,5 +41,22 @@ class CountOutputWalkerTest extends PaginationTestCase
|
||||
"SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id1 FROM (SELECT count(u0_.id) AS sclr0, g1_.id AS id1, u0_.id AS id2 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 sclr0 > 0) dctrn_result) dctrn_table", $query->getSql()
|
||||
);
|
||||
}
|
||||
|
||||
public function testCountQueryOrderBySqlServer()
|
||||
{
|
||||
if ($this->entityManager->getConnection()->getDatabasePlatform()->getName() !== "mssql") {
|
||||
$this->markTestSkipped('SQLServer only test.');
|
||||
}
|
||||
|
||||
$query = $this->entityManager->createQuery(
|
||||
'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id');
|
||||
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
||||
$query->setFirstResult(null)->setMaxResults(null);
|
||||
|
||||
$this->assertEquals(
|
||||
"SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id0 FROM (SELECT b0_.id AS id0, b0_.author_id AS author_id1, b0_.category_id AS category_id2 FROM BlogPost b0_) dctrn_result) dctrn_table",
|
||||
$query->getSql()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user