From c2997b39611a370a631a09b74c7ef75a78885aa4 Mon Sep 17 00:00:00 2001 From: Brad Sahlhoff Date: Mon, 18 Nov 2013 10:36:46 -0500 Subject: [PATCH 1/2] Add ability to test same parameter name for multiple values. --- lib/Doctrine/ORM/Query/QueryExpressionVisitor.php | 6 ++++++ tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php index 2da6fb412..d01aafa81 100644 --- a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php +++ b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php @@ -127,6 +127,12 @@ class QueryExpressionVisitor extends ExpressionVisitor public function walkComparison(Comparison $comparison) { $parameterName = str_replace('.', '_', $comparison->getField()); + foreach($this->parameters as $parameter) { + if($parameter->getName() === $parameterName) { + $parameterName .= '_' . count($this->parameters); + break; + } + } $parameter = new Parameter($parameterName, $this->walkValue($comparison->getValue())); $placeholder = ':' . $parameterName; diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 6975c1510..98c3e2bc5 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -141,7 +141,7 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a ON u.id = a.author_id' ); } - + public function testComplexInnerJoinWithIndexBy() { $qb = $this->_em->createQueryBuilder() @@ -153,7 +153,7 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase $qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a INDEX BY a.name ON u.id = a.author_id' ); - } + } public function testLeftJoin() { @@ -411,6 +411,17 @@ class QueryBuilderTest extends \Doctrine\Tests\OrmTestCase $this->assertNotNull($qb->getParameter('field')); } + public function testAddMultipleSameCriteriaWhere() + { + $qb = $this->_em->createQueryBuilder(); + $criteria = new Criteria(); + $criteria->where($criteria->expr()->andX($criteria->expr()->eq('field', 'value1'), $criteria->expr()->eq('field', 'value2'))); + $qb->addCriteria($criteria); + $this->assertEquals('field = :field AND field = :field_1', (string) $qb->getDQLPart('where')); + $this->assertNotNull($qb->getParameter('field')); + $this->assertNotNull($qb->getParameter('field_1')); + } + public function testAddCriteriaOrder() { $qb = $this->_em->createQueryBuilder(); From 96fb0d7e1429d6afafe0dde3ed6ccc502e7c9cc1 Mon Sep 17 00:00:00 2001 From: Brad Sahlhoff Date: Tue, 19 Nov 2013 11:09:23 -0500 Subject: [PATCH 2/2] Changed logic to allow joining games, and becoming friends Added Spacing --- lib/Doctrine/ORM/Query/QueryExpressionVisitor.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php index d01aafa81..5ac27be70 100644 --- a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php +++ b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php @@ -127,12 +127,14 @@ class QueryExpressionVisitor extends ExpressionVisitor public function walkComparison(Comparison $comparison) { $parameterName = str_replace('.', '_', $comparison->getField()); + foreach($this->parameters as $parameter) { if($parameter->getName() === $parameterName) { $parameterName .= '_' . count($this->parameters); break; } } + $parameter = new Parameter($parameterName, $this->walkValue($comparison->getValue())); $placeholder = ':' . $parameterName;