diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php b/typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php index 5059824aa36c76a84ceaa6a20c75d1961d61adb9..7ee1ba0d2bd40f485bb6cb1ef81a5b85f7a744ec 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php @@ -35,6 +35,11 @@ class QueryResult implements QueryResultInterface { */ protected $persistenceManager; + /** + * @var int|NULL + */ + protected $numberOfResults; + /** * @var \TYPO3\CMS\Extbase\Persistence\QueryInterface */ @@ -105,11 +110,14 @@ class QueryResult implements QueryResultInterface { * @api */ public function count() { - if (is_array($this->queryResult)) { - return count($this->queryResult); - } else { - return $this->persistenceManager->getObjectCountByQuery($this->query); + if ($this->numberOfResults === NULL) { + if (is_array($this->queryResult)) { + $this->numberOfResults = count($this->queryResult); + } else { + $this->numberOfResults = $this->persistenceManager->getObjectCountByQuery($this->query); + } } + return $this->numberOfResults; } /** diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/QueryResultTest.php b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/QueryResultTest.php index c91924723b046e629c53351812d76ced4434633c..be1e9a017f3fa04f72a64b1618b3bd11d34ada94 100644 --- a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/QueryResultTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/QueryResultTest.php @@ -129,6 +129,24 @@ class QueryResultTest extends \TYPO3\CMS\Core\Tests\UnitTestCase { $this->assertEquals(2, $queryResult->count()); } + /** + * @test + */ + public function countCountsQueryResultDirectlyIfAlreadyInitialized() { + $this->mockPersistenceManager->expects($this->never())->method('getObjectCountByQuery'); + $this->queryResult->toArray(); + $this->assertEquals(2, $this->queryResult->count()); + } + + /** + * @test + */ + public function countOnlyCallsGetObjectCountByQueryOnPersistenceManagerOnce() { + $this->mockPersistenceManager->expects($this->once())->method('getObjectCountByQuery')->will($this->returnValue(2)); + $this->queryResult->count(); + $this->assertEquals(2, $this->queryResult->count()); + } + /** * @test */