Permalink
Browse files

Merge branch 'hotfix/paginator-db-count-subselect' of https://github.…

  • Loading branch information...
2 parents bcda072 + e04fb2a commit 6754264cb486803cba56a5a383840e2ae9982eba @EvanDotPro EvanDotPro committed Jun 12, 2013
Showing with 35 additions and 27 deletions.
  1. +4 −11 library/Zend/Paginator/Adapter/DbSelect.php
  2. +31 −16 tests/ZendTest/Paginator/Adapter/DbSelectTest.php
@@ -103,22 +103,15 @@ public function count()
}
$select = clone $this->select;
- $select->reset(Select::COLUMNS);
$select->reset(Select::LIMIT);
$select->reset(Select::OFFSET);
$select->reset(Select::ORDER);
- $select->reset(Select::GROUP);
- // get join information, clear, and repopulate without columns
- $joins = $select->getRawState(Select::JOINS);
- $select->reset(Select::JOINS);
- foreach ($joins as $join) {
- $select->join($join['name'], $join['on'], array(), $join['type']);
- }
-
- $select->columns(array('c' => new Expression('COUNT(1)')));
+ $countSelect = new Select;
+ $countSelect->columns(array('c' => new Expression('COUNT(1)')));
+ $countSelect->from(array('original_select' => $select));
- $statement = $this->sql->prepareStatementForSqlObject($select);
+ $statement = $this->sql->prepareStatementForSqlObject($countSelect);
$result = $statement->execute();
$row = $result->current();
@@ -25,29 +25,53 @@ class DbSelectTest extends \PHPUnit_Framework_TestCase
/** @var \PHPUnit_Framework_MockObject_MockObject */
protected $mockSelect;
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ protected $mockStatement;
+
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
protected $mockResult;
+ /** @var \PHPUnit_Framework_MockObject_MockObject */
+ protected $mockSql;
+
/** @var DbSelect */
protected $dbSelect;
public function setup()
{
- $mockStatement = $this->getMock('Zend\Db\Adapter\Driver\StatementInterface');
$mockResult = $this->getMock('Zend\Db\Adapter\Driver\ResultInterface');
+ $this->mockResult = $mockResult;
+
+ $mockStatement = $this->getMock('Zend\Db\Adapter\Driver\StatementInterface');
+ $this->mockStatement = $mockStatement;
+
+ $this->mockStatement->expects($this->any())->method('execute')->will($this->returnValue($this->mockResult));
$mockDriver = $this->getMock('Zend\Db\Adapter\Driver\DriverInterface');
$mockDriver->expects($this->any())->method('createStatement')->will($this->returnValue($mockStatement));
- $mockStatement->expects($this->any())->method('execute')->will($this->returnValue($mockResult));
+
$mockPlatform = $this->getMock('Zend\Db\Adapter\Platform\PlatformInterface');
$mockPlatform->expects($this->any())->method('getName')->will($this->returnValue('platform'));
$mockAdapter = $this->getMockForAbstractClass(
'Zend\Db\Adapter\Adapter',
array($mockDriver, $mockPlatform)
);
+ $mockSql = $this->getMock(
+ 'Zend\Db\Sql\Sql',
+ array('prepareStatementForSqlObject', 'execute'),
+ array($mockAdapter)
+ );
+ $this->mockSql = $mockSql;
+ $this->mockSql->expects($this->once())
+ ->method('prepareStatementForSqlObject')
+ ->with($this->isInstanceOf('Zend\Db\Sql\Select'))
+ ->will($this->returnValue($this->mockStatement));
+
+
$this->mockSelect = $this->getMock('Zend\Db\Sql\Select');
- $this->mockResult = $mockResult;
- $this->dbSelect = new DbSelect($this->mockSelect, $mockAdapter);
+
+ $this->dbSelect = new DbSelect($this->mockSelect, $mockSql);
}
public function testGetItems()
@@ -60,18 +84,9 @@ public function testGetItems()
public function testCount()
{
- $this->mockSelect->expects($this->once())->method('columns')->with($this->equalTo(array('c' => new Expression('COUNT(1)'))));
- $this->mockResult->expects($this->any())->method('current')->will($this->returnValue(array('c' => 5)));
-
- $this->mockSelect->expects($this->exactly(6))->method('reset'); // called for columns, limit, offset, order
- $this->mockSelect->expects($this->once())->method('getRawState')->with($this->equalTo(Select::JOINS))
- ->will($this->returnValue(array(array('name' => 'Foo', 'on' => 'On Stuff', 'columns' => array('foo', 'bar'), 'type' => Select::JOIN_INNER))));
- $this->mockSelect->expects($this->once())->method('join')->with(
- 'Foo',
- 'On Stuff',
- array(),
- Select::JOIN_INNER
- );
+ $this->mockResult->expects($this->once())->method('current')->will($this->returnValue(array('c' => 5)));
+
+ $this->mockSelect->expects($this->exactly(3))->method('reset'); // called for columns, limit, offset, order
$count = $this->dbSelect->count();
$this->assertEquals(5, $count);

0 comments on commit 6754264

Please sign in to comment.