From 29938425f6aee9db42f9948c643f49f8846caea5 Mon Sep 17 00:00:00 2001 From: Yoshitaka Jingu Date: Tue, 8 Mar 2022 10:33:49 +0900 Subject: [PATCH] fix assertion when $nbResults get 0 --- src/Pagerfanta/AuraSqlQueryAdapter.php | 6 +++++- src/Pagerfanta/ExtendedPdoAdapter.php | 8 +++++--- tests/Pagerfanta/AuraSqlQueryAdapterTest.php | 17 +++++++++++++++++ tests/Pagerfanta/ExtendedPdoAdapterTest.php | 6 ++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/Pagerfanta/AuraSqlQueryAdapter.php b/src/Pagerfanta/AuraSqlQueryAdapter.php index 5b6b3df..3f71bab 100644 --- a/src/Pagerfanta/AuraSqlQueryAdapter.php +++ b/src/Pagerfanta/AuraSqlQueryAdapter.php @@ -15,6 +15,10 @@ use function is_array; use function is_int; +/** + * @template T + * @implements AdapterInterface + */ class AuraSqlQueryAdapter implements AdapterInterface { private ExtendedPdoInterface $pdo; @@ -45,7 +49,7 @@ public function getNbResults(): int $sth->execute($this->select->getBindValues()); $result = $sth->fetchColumn(); $nbResults = (int) $result; - assert($nbResults > 0); + assert($nbResults >= 0); assert(is_int($nbResults)); return $nbResults; diff --git a/src/Pagerfanta/ExtendedPdoAdapter.php b/src/Pagerfanta/ExtendedPdoAdapter.php index f634a30..08f5a5e 100644 --- a/src/Pagerfanta/ExtendedPdoAdapter.php +++ b/src/Pagerfanta/ExtendedPdoAdapter.php @@ -20,6 +20,10 @@ use const PHP_EOL; +/** + * @template T + * @implements AdapterInterface + */ class ExtendedPdoAdapter implements AdapterInterface { private ExtendedPdoInterface $pdo; @@ -41,8 +45,6 @@ public function __construct(ExtendedPdoInterface $pdo, string $sql, array $param /** * {@inheritdoc} * - * @phpstan-return positive-int - * * @SuppressWarnings(PHPMD.GotoStatement) */ public function getNbResults(): int @@ -66,7 +68,7 @@ public function getNbResults(): int /** @var string $count */ $nbResult = ! $count ? 0 : (int) $count; assert(is_int($nbResult)); - assert($nbResult > 0); + assert($nbResult >= 0); return $nbResult; } diff --git a/tests/Pagerfanta/AuraSqlQueryAdapterTest.php b/tests/Pagerfanta/AuraSqlQueryAdapterTest.php index 1cf45a4..9711fa1 100644 --- a/tests/Pagerfanta/AuraSqlQueryAdapterTest.php +++ b/tests/Pagerfanta/AuraSqlQueryAdapterTest.php @@ -28,6 +28,23 @@ public function testGetNbResultsShouldWorkAfterCallingGetSlice() $this->doTestGetNbResults($adapter); } + public function testGetNbResultsShouldReturnZero() + { + $select = clone $this->select; + $select->where('p.username = "_DUMMY_"'); + + $countQueryBuilderModifier = static function (Select $select) { + foreach (array_keys($select->getCols()) as $key) { + $select->removeCol($key); + } + + return $select->cols(['COUNT(*) AS total_results'])->limit(1); + }; + + $adapter = new AuraSqlQueryAdapter($this->pdo, $select, $countQueryBuilderModifier); + $this->assertSame(0, $adapter->getNbResults()); + } + public function testGetSlice() { $adapter = $this->createAdapterToTestGetSlice(); diff --git a/tests/Pagerfanta/ExtendedPdoAdapterTest.php b/tests/Pagerfanta/ExtendedPdoAdapterTest.php index 85bcd84..911a336 100644 --- a/tests/Pagerfanta/ExtendedPdoAdapterTest.php +++ b/tests/Pagerfanta/ExtendedPdoAdapterTest.php @@ -23,6 +23,12 @@ public function testGetNbResults() $this->assertSame(50, $nbResult); } + public function testGetNbResultsShouldReturnZero() + { + $adapter = new ExtendedPdoAdapter($this->pdo, 'SELECT * FROM posts WHERE posts.username = "_DUMMY_"', []); + $this->assertSame(0, $adapter->getNbResults()); + } + public function testGetLimitClause() { $limitClause = $this->pdoAdapter->getLimitClause(1, 10);