From e5e7fdb7e6ea5ee104ee53b472b220734c28a35e Mon Sep 17 00:00:00 2001 From: Anton Grebnev Date: Mon, 6 Feb 2012 18:12:23 +0400 Subject: [PATCH] added MongoStatement method to count results before skip/limit --- model/MongoStatement.php | 9 +++++++++ tests/model/MongoDriverTest.php | 15 +++++++++++++++ tests/model/MongoStatementTest.php | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/model/MongoStatement.php b/model/MongoStatement.php index 9060dee..3e43f0a 100644 --- a/model/MongoStatement.php +++ b/model/MongoStatement.php @@ -16,6 +16,15 @@ class MongoStatement extends DbStatement protected $insertId = false; + public function count() + { + if ($this->result instanceof MongoCursor) { + return $this->result->count(); + } else { + throw new GeneralException('MongoStatement error. Impossible count result of opened cursor.'); + } + } + public function order($sort = array()) { if ($this->result instanceof MongoCursor) { diff --git a/tests/model/MongoDriverTest.php b/tests/model/MongoDriverTest.php index fe90534..4e4d3dd 100644 --- a/tests/model/MongoDriverTest.php +++ b/tests/model/MongoDriverTest.php @@ -197,6 +197,21 @@ class MongoDriverTest extends PHPUnit_Framework_TestCase * @runInSeparateProcess * @group Mongo */ + public function testCursorCount() + { + if (!defined('DEBUG')) { + define('DEBUG', false); + } + $mongo = new MongoDriver($this->conf); + $this->assertEquals(5, $mongo->find('items')->count(5)); + $this->assertCount(3, $mongo->find('items')->limit(3)->fetchAll()); + $this->assertEquals(5, $mongo->count('items')); + } + + /** + * @runInSeparateProcess + * @group Mongo + */ public function testGet() { if (!defined('DEBUG')) { diff --git a/tests/model/MongoStatementTest.php b/tests/model/MongoStatementTest.php index c945925..1fb5fca 100644 --- a/tests/model/MongoStatementTest.php +++ b/tests/model/MongoStatementTest.php @@ -338,6 +338,43 @@ class MongoStatementTest extends PHPUnit_Framework_TestCase * @runInSeparateProcess * @group Mongo */ + public function testCount() + { + if (!defined('DEBUG')) { + define('DEBUG', true); + } + $this->setDriverGetConnectionMethod()->setRequestForFetch(); + + $this->stmt->execute(); + $this->assertSame(10, $this->stmt->count()); + + $this->stmt->fetch(); + } + + /** + * @runInSeparateProcess + * @group Mongo + */ + public function testCountException() + { + if (!defined('DEBUG')) { + define('DEBUG', true); + } + $this->setDriverGetConnectionMethod(); + $this->request + ->expects($this->once()) + ->method('execute') + ->will($this->returnValue(array('some' => 'val'))); + + $this->stmt->execute(); + $this->setExpectedException('GeneralException', 'MongoStatement error. Impossible count result of opened cursor'); + $this->stmt->count(); + } + + /** + * @runInSeparateProcess + * @group Mongo + */ public function testOrderException() { if (!defined('DEBUG')) {