1
0
mirror of synced 2025-01-18 22:41:43 +03:00

[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:
Norbert Orzechowicz 2013-02-07 14:44:55 +01:00 committed by Benjamin Eberlei
parent d5dd7d6f8a
commit 6a69b4700c
2 changed files with 21 additions and 0 deletions

View File

@ -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

View File

@ -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()
);
}
}