From f5d4db7d9c989a1b8f10d8ff1ea2e9f5d6020367 Mon Sep 17 00:00:00 2001 From: SimonHeimberg Date: Tue, 22 Nov 2016 09:03:01 +0100 Subject: [PATCH 1/5] Report that FROM and JOIN do not support Subqueries --- lib/Doctrine/ORM/Query/Parser.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index a06cd83a6..c63148654 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1715,6 +1715,9 @@ class Parser */ public function RangeVariableDeclaration() { + if ($this->lexer->isNextToken(Lexer::T_OPEN_PARENTHESIS) && $this->lexer->glimpse()['type'] === Lexer::T_SELECT) { + $this->semanticalError('Subquery is not supported here', $this->lexer->token); + } $abstractSchemaName = $this->AbstractSchemaName(); $this->validateAbstractSchemaName($abstractSchemaName); From 5b6d766961e60e2d9dcf4a14ca6e2b7d20591bab Mon Sep 17 00:00:00 2001 From: SimonHeimberg Date: Tue, 27 Dec 2016 09:47:03 +0100 Subject: [PATCH 2/5] Tests for not supported Subqueries in FROM and JOIN --- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index c5a5da411..c97929f9d 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -278,4 +278,24 @@ class QueryTest extends OrmTestCase // Retrieves cached data since expire flag is false and we have a cached result set self::assertCount(2, $query->expireResultCache(false)->getResult()); } + + /** + * @expectedException Doctrine\ORM\Query\QueryException + * @exptectedExcepionMessage Subquery + */ + public function testSelectJoinSubquery() + { + $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )"); + $query->getResult(); + } + + /** + * @expectedException Doctrine\ORM\Query\QueryException + * @exptectedExcepionMessage Subquery + */ + public function testSelectFromSubquery() + { + $query = $this->_em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u"); + $query->getResult(); + } } From 1dbc67cce16216e3ffcbc165ef4c52da0dddd7ec Mon Sep 17 00:00:00 2001 From: SimonHeimberg Date: Wed, 19 Apr 2017 17:06:48 +0200 Subject: [PATCH 3/5] Tests for Subqueries set expectations directly before their occurrence --- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index c97929f9d..dd7ad3fa5 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -8,6 +8,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Internal\Hydration\IterableResult; use Doctrine\ORM\Query\Parameter; +use Doctrine\ORM\Query\QueryException; use Doctrine\Tests\Mocks\DriverConnectionMock; use Doctrine\Tests\Mocks\StatementArrayMock; use Doctrine\Tests\Models\CMS\CmsAddress; @@ -279,23 +280,19 @@ class QueryTest extends OrmTestCase self::assertCount(2, $query->expireResultCache(false)->getResult()); } - /** - * @expectedException Doctrine\ORM\Query\QueryException - * @exptectedExcepionMessage Subquery - */ public function testSelectJoinSubquery() { $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )"); + $this->expectException(QueryException::class); + $this->expectExceptionMessage('Subquery'); $query->getResult(); } - /** - * @expectedException Doctrine\ORM\Query\QueryException - * @exptectedExcepionMessage Subquery - */ public function testSelectFromSubquery() { $query = $this->_em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u"); + $this->expectException(QueryException::class); + $this->expectExceptionMessage('Subquery'); $query->getResult(); } } From a7dcdd8d48c502f1374bc8b097b714f5f94970e3 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 05:35:58 +0200 Subject: [PATCH 4/5] Documenting thrown exception type, spacing #6162 --- lib/Doctrine/ORM/Query/Parser.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index c63148654..c21b2de96 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1712,12 +1712,15 @@ class Parser * RangeVariableDeclaration ::= AbstractSchemaName ["AS"] AliasIdentificationVariable * * @return \Doctrine\ORM\Query\AST\RangeVariableDeclaration + * + * @throws QueryException */ public function RangeVariableDeclaration() { if ($this->lexer->isNextToken(Lexer::T_OPEN_PARENTHESIS) && $this->lexer->glimpse()['type'] === Lexer::T_SELECT) { $this->semanticalError('Subquery is not supported here', $this->lexer->token); } + $abstractSchemaName = $this->AbstractSchemaName(); $this->validateAbstractSchemaName($abstractSchemaName); From 3260d220e852970fdee68d840a235af4337e51a1 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 05:38:42 +0200 Subject: [PATCH 5/5] #6162 adding `@group` annotation, spacing --- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index dd7ad3fa5..5a2a295fe 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -280,19 +280,27 @@ class QueryTest extends OrmTestCase self::assertCount(2, $query->expireResultCache(false)->getResult()); } + /** + * @group #6162 + */ public function testSelectJoinSubquery() { $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )"); + $this->expectException(QueryException::class); $this->expectExceptionMessage('Subquery'); - $query->getResult(); + $query->getSQL(); } + /** + * @group #6162 + */ public function testSelectFromSubquery() { $query = $this->_em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u"); + $this->expectException(QueryException::class); $this->expectExceptionMessage('Subquery'); - $query->getResult(); + $query->getSQL(); } }