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

View File

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

View File

@ -38,7 +38,7 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
foreach ($queryHints AS $name => $value) { foreach ($queryHints AS $name => $value) {
$query->setHint($name, $value); $query->setHint($name, $value);
} }
parent::assertEquals($sqlToBeConfirmed, $query->getSQL()); parent::assertEquals($sqlToBeConfirmed, $query->getSQL());
$query->free(); $query->free();
} catch (\Exception $e) { } 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 * @group DDC-1298
*/ */