From 2104ae993526c266696bb7b7f72cc3465589fda6 Mon Sep 17 00:00:00 2001 From: "Fabio B. Silva" Date: Thu, 20 Dec 2012 23:06:30 -0200 Subject: [PATCH] fix DDC-2205 --- lib/Doctrine/ORM/Query/Parser.php | 3 ++ .../ORM/Query/SelectSqlGenerationTest.php | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index bdf179d0f6e..036c11934c8 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1792,6 +1792,9 @@ public function ScalarExpression() switch (true) { case ($lookahead === Lexer::T_INTEGER): case ($lookahead === Lexer::T_FLOAT): + // SimpleArithmeticExpression : (- u.value ) or ( + u.value ) or ( - 1 ) or ( + 1 ) + case ($lookahead === Lexer::T_MINUS): + case ($lookahead === Lexer::T_PLUS): return $this->SimpleArithmeticExpression(); case ($lookahead === Lexer::T_STRING): diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index 3bfc171d571..a15e8367cf5 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -1230,6 +1230,37 @@ public function testSimpleCaseWithStringPrimary() ); } + /** + * @group DDC-2205 + */ + public function testCaseNegativeValuesInThenExpression() + { + $this->assertSqlGeneration( + "SELECT CASE g.name WHEN 'admin' THEN - 1 ELSE - 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", + "SELECT CASE c0_.name WHEN 'admin' THEN -1 ELSE -2 END AS sclr0 FROM cms_groups c0_" + ); + + $this->assertSqlGeneration( + "SELECT CASE g.name WHEN 'admin' THEN - 2 WHEN 'guest' THEN - 1 ELSE 0 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", + "SELECT CASE c0_.name WHEN 'admin' THEN -2 WHEN 'guest' THEN -1 ELSE 0 END AS sclr0 FROM cms_groups c0_" + ); + + $this->assertSqlGeneration( + "SELECT CASE g.name WHEN 'admin' THEN (- 1) ELSE (- 2) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", + "SELECT CASE c0_.name WHEN 'admin' THEN -1 ELSE -2 END AS sclr0 FROM cms_groups c0_" + ); + + $this->assertSqlGeneration( + "SELECT CASE g.name WHEN 'admin' THEN ( - :value) ELSE ( + :value) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", + "SELECT CASE c0_.name WHEN 'admin' THEN -? ELSE +? END AS sclr0 FROM cms_groups c0_" + ); + + $this->assertSqlGeneration( + "SELECT CASE g.name WHEN 'admin' THEN ( - g.id) ELSE ( + g.id) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", + "SELECT CASE c0_.name WHEN 'admin' THEN -c0_.id ELSE +c0_.id END AS sclr0 FROM cms_groups c0_" + ); + } + /** * @group DDC-1339 */