From 6279c80e0511108a104fc80b27963fdf627bd249 Mon Sep 17 00:00:00 2001 From: Alessandro Lai Date: Fri, 8 Jan 2016 17:56:41 +0100 Subject: [PATCH 1/2] Regression test: HAVING clause does not translate variable name when used with * and / math operators --- .../ORM/Query/SelectSqlGenerationTest.php | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index 39c207152..a3a34f822 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -2242,6 +2242,27 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING sclr_0 IS NULL' ); } + + /** + * GitHub issue #4764: https://github.com/doctrine/doctrine2/issues/4764 + * @group DDC-3907 + * @dataProvider mathematicOperatorsProvider + */ + public function testHavingRegressionUsingVariableWithMathOperatorsExpression($operator) + { + $this->assertSqlGeneration( + 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING 1 ' . $operator . ' countName > 0', + 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING 1 ' . $operator . ' sclr_0 > 0' + ); + } + + /** + * @return array + */ + public function mathematicOperatorsProvider() + { + return [['+'], ['-'], ['*'], ['/']]; + } } class MyAbsFunction extends \Doctrine\ORM\Query\AST\Functions\FunctionNode From c4209b46549d928449330a1ff143c3ecfa7437b6 Mon Sep 17 00:00:00 2001 From: Bill Schaller Date: Fri, 8 Jan 2016 12:53:05 -0500 Subject: [PATCH 2/2] Fix issue were identifier operands in /,* arithmetic terms were not checked to see if they're query components --- lib/Doctrine/ORM/Query/SqlWalker.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 3dea8de4b..9c4ac2a88 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -2264,7 +2264,9 @@ class SqlWalker implements TreeWalker public function walkArithmeticFactor($factor) { if (is_string($factor)) { - return $factor; + return (isset($this->queryComponents[$factor])) + ? $this->walkResultVariable($this->queryComponents[$factor]['token']['value']) + : $factor; } // Phase 2 AST optimization: Skip processing of ArithmeticFactor