diff --git a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php index dbcc8c813..a095c2a7d 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php @@ -36,7 +36,11 @@ class SingleScalarHydrator extends AbstractHydrator { $cache = array(); $result = $this->_stmt->fetchAll(\PDO::FETCH_ASSOC); - if (count($result) > 1 || count($result[key($result)]) > 1) { + $num = count($result); + + if ($num == 0) { + throw new \Doctrine\ORM\NoResultException; + } else if ($num > 1 || count($result[key($result)]) > 1) { throw new \Doctrine\ORM\NonUniqueResultException; } $result = $this->_gatherScalarRowData($result[key($result)], $cache); diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index 4a13b0b7a..b1074cbc5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -224,7 +224,47 @@ class QueryTest extends \Doctrine\Tests\OrmFunctionalTestCase public function testGetSingleResultThrowsExceptionOnNoResult() { $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") - ->getSingleResult(); + ->getSingleResult(); + } + + /** + * @expectedException Doctrine\ORM\NoResultException + */ + public function testGetSingleScalarResultThrowsExceptionOnNoResult() + { + $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") + ->getSingleScalarResult(); + } + + /** + * @expectedException Doctrine\ORM\NonUniqueResultException + */ + public function testGetSingleScalarResultThrowsExceptionOnNonUniqueResult() + { + $user = new CmsUser; + $user->name = 'Guilherme'; + $user->username = 'gblanco'; + $user->status = 'developer'; + + $article1 = new CmsArticle; + $article1->topic = "Doctrine 2"; + $article1->text = "This is an introduction to Doctrine 2."; + $user->addArticle($article1); + + $article2 = new CmsArticle; + $article2->topic = "Symfony 2"; + $article2->text = "This is an introduction to Symfony 2."; + $user->addArticle($article2); + + $this->_em->persist($user); + $this->_em->persist($article1); + $this->_em->persist($article2); + + $this->_em->flush(); + $this->_em->clear(); + + $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") + ->getSingleScalarResult(); } public function testSupportsQueriesWithEntityNamespaces()