1
0
mirror of synced 2024-12-13 22:56:04 +03:00

Added support for ResultVariable referencing in ArithmeticPrimary. Fixes DDC-1346.

This commit is contained in:
Guilherme Blanco 2011-09-05 03:16:01 -03:00
parent ddfdb37a58
commit 6bbf2d9da3
3 changed files with 21 additions and 3 deletions

View File

@ -2381,7 +2381,7 @@ class Parser
/**
* ArithmeticPrimary ::= SingleValuedPathExpression | Literal | "(" SimpleArithmeticExpression ")"
* | FunctionsReturningNumerics | AggregateExpression | FunctionsReturningStrings
* | FunctionsReturningDatetime | IdentificationVariable | CaseExpression
* | FunctionsReturningDatetime | IdentificationVariable | ResultVariable | CaseExpression
*/
public function ArithmeticPrimary()
{
@ -2410,7 +2410,11 @@ class Parser
if ($peek['value'] == '.') {
return $this->SingleValuedPathExpression();
}
if (isset($this->_queryComponents[$this->_lexer->lookahead['value']]['resultVariable'])) {
return $this->ResultVariable();
}
return $this->StateFieldPathExpression();
case Lexer::T_INPUT_PARAMETER:

View File

@ -1971,6 +1971,12 @@ class SqlWalker implements TreeWalker
public function walkArithmeticTerm($term)
{
if (is_string($term)) {
if (isset($this->_queryComponents[$term])) {
$columnName = $this->_queryComponents[$term]['token']['value'];
return $this->_scalarResultAliasMap[$columnName];
}
return $term;
}

View File

@ -38,7 +38,7 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
foreach ($queryHints AS $name => $value) {
$query->setHint($name, $value);
}
parent::assertEquals($sqlToBeConfirmed, $query->getSQL());
$query->free();
} catch (\Exception $e) {
@ -991,6 +991,14 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
);
}
public function testSubSelectAliasesFromOuterQueryReuseInWhereClause()
{
$this->assertSqlGeneration(
"SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo WHERE bar = ?0",
"SELECT c0_.id AS id0, c0_.status AS status1, c0_.username AS username2, c0_.name AS name3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr4 FROM cms_users c0_ WHERE sclr4 = ?"
);
}
/**
* @group DDC-1298
*/