1
0
mirror of synced 2025-02-09 08:49: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
*
* @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);

View File

@ -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;
@ -278,4 +279,28 @@ 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());
}
/**
* @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();
}
}