1
0
mirror of synced 2025-02-10 01:09:26 +03:00

Merge branch 'feature/#6162-report-that-subqueries-are-not-allowed-in-from-and-join'

Close #6162
This commit is contained in:
Marco Pivetta 2017-06-21 05:39:01 +02:00
commit 1e3bf6562e
No known key found for this signature in database
GPG Key ID: 4167D3337FD9D629
2 changed files with 31 additions and 0 deletions

View File

@ -1712,9 +1712,15 @@ class Parser
* RangeVariableDeclaration ::= AbstractSchemaName ["AS"] AliasIdentificationVariable * RangeVariableDeclaration ::= AbstractSchemaName ["AS"] AliasIdentificationVariable
* *
* @return \Doctrine\ORM\Query\AST\RangeVariableDeclaration * @return \Doctrine\ORM\Query\AST\RangeVariableDeclaration
*
* @throws QueryException
*/ */
public function RangeVariableDeclaration() 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(); $abstractSchemaName = $this->AbstractSchemaName();
$this->validateAbstractSchemaName($abstractSchemaName); $this->validateAbstractSchemaName($abstractSchemaName);

View File

@ -8,6 +8,7 @@ use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Internal\Hydration\IterableResult; use Doctrine\ORM\Internal\Hydration\IterableResult;
use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\Query\Parameter;
use Doctrine\ORM\Query\QueryException;
use Doctrine\Tests\Mocks\DriverConnectionMock; use Doctrine\Tests\Mocks\DriverConnectionMock;
use Doctrine\Tests\Mocks\StatementArrayMock; use Doctrine\Tests\Mocks\StatementArrayMock;
use Doctrine\Tests\Models\CMS\CmsAddress; use Doctrine\Tests\Models\CMS\CmsAddress;
@ -278,4 +279,28 @@ class QueryTest extends OrmTestCase
// Retrieves cached data since expire flag is false and we have a cached result set // Retrieves cached data since expire flag is false and we have a cached result set
self::assertCount(2, $query->expireResultCache(false)->getResult()); 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->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->getSQL();
}
} }