Fixed issue with CaseExpression not working in Subselects.
This commit is contained in:
parent
2ae3bb6e3a
commit
a86038b484
@ -1696,6 +1696,7 @@ class Parser
|
|||||||
return $this->CoalesceExpression();
|
return $this->CoalesceExpression();
|
||||||
|
|
||||||
case Lexer::T_CASE:
|
case Lexer::T_CASE:
|
||||||
|
$this->_lexer->resetPeek();
|
||||||
$peek = $this->_lexer->peek();
|
$peek = $this->_lexer->peek();
|
||||||
|
|
||||||
return ($peek['type'] === Lexer::T_WHEN)
|
return ($peek['type'] === Lexer::T_WHEN)
|
||||||
|
@ -1316,6 +1316,25 @@ class SqlWalker implements TreeWalker
|
|||||||
$columnAlias = 'sclr' . $this->_aliasCounter++;
|
$columnAlias = 'sclr' . $this->_aliasCounter++;
|
||||||
$sql .= $this->walkSimpleArithmeticExpression($expr) . ' AS ' . $columnAlias;
|
$sql .= $this->walkSimpleArithmeticExpression($expr) . ' AS ' . $columnAlias;
|
||||||
$this->_scalarResultAliasMap[$alias] = $columnAlias;
|
$this->_scalarResultAliasMap[$alias] = $columnAlias;
|
||||||
|
} else if (
|
||||||
|
$expr instanceof AST\NullIfExpression ||
|
||||||
|
$expr instanceof AST\CoalesceExpression ||
|
||||||
|
$expr instanceof AST\GeneralCaseExpression ||
|
||||||
|
$expr instanceof AST\SimpleCaseExpression
|
||||||
|
) {
|
||||||
|
if ( ! $simpleSelectExpression->fieldIdentificationVariable) {
|
||||||
|
$alias = $this->_scalarResultCounter++;
|
||||||
|
} else {
|
||||||
|
$alias = $simpleSelectExpression->fieldIdentificationVariable;
|
||||||
|
}
|
||||||
|
|
||||||
|
$columnAlias = 'sclr' . $this->_aliasCounter++;
|
||||||
|
$sql .= $this->walkCaseExpression($expr) . ' AS ' . $columnAlias;
|
||||||
|
|
||||||
|
$this->_scalarResultAliasMap[$alias] = $columnAlias;
|
||||||
|
|
||||||
|
$columnAlias = $this->_platform->getSQLResultCasing($columnAlias);
|
||||||
|
$this->_rsm->addScalarResult($columnAlias, $alias);
|
||||||
} else {
|
} else {
|
||||||
// IdentificationVariable
|
// IdentificationVariable
|
||||||
$class = $this->_queryComponents[$expr]['metadata'];
|
$class = $this->_queryComponents[$expr]['metadata'];
|
||||||
|
@ -1042,6 +1042,38 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGeneralCaseWithSingleWhenClauseInSubselect()
|
||||||
|
{
|
||||||
|
$this->assertSqlGeneration(
|
||||||
|
"SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN ((g2.id / 2) > 18) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)",
|
||||||
|
"SELECT c0_.id AS id0, c0_.name AS name1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN (c1_.id / 2 > 18) THEN 2 ELSE 1 END AS sclr2 FROM cms_groups c1_)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGeneralCaseWithMultipleWhenClauseInSubselect()
|
||||||
|
{
|
||||||
|
$this->assertSqlGeneration(
|
||||||
|
"SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN (g.id / 2 < 10) THEN 3 WHEN ((g.id / 2) > 20) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)",
|
||||||
|
"SELECT c0_.id AS id0, c0_.name AS name1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN (c0_.id / 2 < 10) THEN 3 WHEN (c0_.id / 2 > 20) THEN 2 ELSE 1 END AS sclr2 FROM cms_groups c1_)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSimpleCaseWithSingleWhenClauseInSubselect()
|
||||||
|
{
|
||||||
|
$this->assertSqlGeneration(
|
||||||
|
"SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 ELSE 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)",
|
||||||
|
"SELECT c0_.id AS id0, c0_.name AS name1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN admin THEN 1 ELSE 2 END AS sclr2 FROM cms_groups c1_)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSimpleCaseWithMultipleWhenClauseInSubselect()
|
||||||
|
{
|
||||||
|
$this->assertSqlGeneration(
|
||||||
|
"SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)",
|
||||||
|
"SELECT c0_.id AS id0, c0_.name AS name1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN admin THEN 1 WHEN moderator THEN 2 ELSE 3 END AS sclr2 FROM cms_groups c1_)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @group DDC-1339
|
* @group DDC-1339
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user