Merge branch 'DDC-2542'
This commit is contained in:
commit
1c8fa12b64
22
lib/Doctrine/ORM/Tools/Pagination/Paginator.php
Normal file → Executable file
22
lib/Doctrine/ORM/Tools/Pagination/Paginator.php
Normal file → Executable file
@ -134,7 +134,7 @@ class Paginator implements \Countable, \IteratorAggregate
|
|||||||
$countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
$countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\CountOutputWalker');
|
||||||
$countQuery->setResultSetMapping($rsm);
|
$countQuery->setResultSetMapping($rsm);
|
||||||
} else {
|
} else {
|
||||||
$countQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\CountWalker'));
|
$this->appendTreeWalker($countQuery, 'Doctrine\ORM\Tools\Pagination\CountWalker');
|
||||||
}
|
}
|
||||||
|
|
||||||
$countQuery->setFirstResult(null)->setMaxResults(null);
|
$countQuery->setFirstResult(null)->setMaxResults(null);
|
||||||
@ -165,7 +165,7 @@ class Paginator implements \Countable, \IteratorAggregate
|
|||||||
if ($this->useOutputWalker($subQuery)) {
|
if ($this->useOutputWalker($subQuery)) {
|
||||||
$subQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\LimitSubqueryOutputWalker');
|
$subQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Tools\Pagination\LimitSubqueryOutputWalker');
|
||||||
} else {
|
} else {
|
||||||
$subQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker'));
|
$this->appendTreeWalker($subQuery, 'Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker');
|
||||||
}
|
}
|
||||||
|
|
||||||
$subQuery->setFirstResult($offset)->setMaxResults($length);
|
$subQuery->setFirstResult($offset)->setMaxResults($length);
|
||||||
@ -231,4 +231,22 @@ class Paginator implements \Countable, \IteratorAggregate
|
|||||||
|
|
||||||
return $this->useOutputWalkers;
|
return $this->useOutputWalkers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends a custom tree walker to the tree walkers hint.
|
||||||
|
*
|
||||||
|
* @param Query $query
|
||||||
|
* @param string $walkerClass
|
||||||
|
*/
|
||||||
|
private function appendTreeWalker(Query $query, $walkerClass)
|
||||||
|
{
|
||||||
|
$hints = $query->getHint(Query::HINT_CUSTOM_TREE_WALKERS);
|
||||||
|
|
||||||
|
if ($hints === false) {
|
||||||
|
$hints = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$hints[] = $walkerClass;
|
||||||
|
$query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, $hints);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,6 +139,18 @@ class PaginationTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertTrue($query->getParameters()->isEmpty());
|
$this->assertTrue($query->getParameters()->isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testQueryWalkerIsKept()
|
||||||
|
{
|
||||||
|
$dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u";
|
||||||
|
$query = $this->_em->createQuery($dql);
|
||||||
|
$query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\Tests\ORM\Functional\CustomPaginationTestTreeWalker'));
|
||||||
|
|
||||||
|
$paginator = new Paginator($query, true);
|
||||||
|
$paginator->setUseOutputWalkers(false);
|
||||||
|
$this->assertCount(1, $paginator->getIterator());
|
||||||
|
$this->assertEquals(1, $paginator->count());
|
||||||
|
}
|
||||||
|
|
||||||
public function populate()
|
public function populate()
|
||||||
{
|
{
|
||||||
for ($i = 0; $i < 3; $i++) {
|
for ($i = 0; $i < 3; $i++) {
|
||||||
@ -166,3 +178,22 @@ class PaginationTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CustomPaginationTestTreeWalker extends Query\TreeWalkerAdapter
|
||||||
|
{
|
||||||
|
public function walkSelectStatement(Query\AST\SelectStatement $selectStatement)
|
||||||
|
{
|
||||||
|
$condition = new Query\AST\ConditionalPrimary();
|
||||||
|
|
||||||
|
$path = new Query\AST\PathExpression(Query\AST\PathExpression::TYPE_STATE_FIELD, 'u', 'name');
|
||||||
|
$path->type = Query\AST\PathExpression::TYPE_STATE_FIELD;
|
||||||
|
|
||||||
|
$condition->simpleConditionalExpression = new Query\AST\ComparisonExpression(
|
||||||
|
$path,
|
||||||
|
'=',
|
||||||
|
new Query\AST\Literal(Query\AST\Literal::STRING, 'Name1')
|
||||||
|
);
|
||||||
|
|
||||||
|
$selectStatement->whereClause = new Query\AST\WhereClause($condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user