Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

group by all fields when entity has foreign keys

  • Loading branch information...
commit aeb2ab132b3f96a91def5ecbf82dbfb4e5c94bf7 1 parent 4cbd5ea
@FabioBatSilva FabioBatSilva authored
View
11 lib/Doctrine/ORM/Query/SqlWalker.php
@@ -22,7 +22,8 @@
use Doctrine\DBAL\LockMode,
Doctrine\ORM\Mapping\ClassMetadata,
Doctrine\ORM\Query,
- Doctrine\ORM\Query\QueryException;
+ Doctrine\ORM\Query\QueryException,
+ Doctrine\ORM\Mapping\ClassMetadataInfo;
/**
* The SqlWalker is a TreeWalker that walks over a DQL AST and constructs
@@ -1307,6 +1308,14 @@ public function walkGroupByClause($groupByClause)
$item->type = AST\PathExpression::TYPE_STATE_FIELD;
$sqlParts[] = $this->walkGroupByItem($item);
}
+
+ foreach ($this->_queryComponents[$groupByItem]['metadata']->associationMappings AS $mapping) {
+ if ($mapping['isOwningSide'] && $mapping['type'] & ClassMetadataInfo::TO_ONE) {
+ $item = new AST\PathExpression(AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $groupByItem, $mapping['fieldName']);
+ $item->type = AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION;
+ $sqlParts[] = $this->walkGroupByItem($item);
+ }
+ }
}
return ' GROUP BY ' . implode(', ', $sqlParts);
View
13 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php
@@ -110,20 +110,9 @@ public function testTicket()
$this->assertEquals($result[0]['p_count'], 2);
$this->assertEquals($result[1]['p_count'], 3);
}
-
-
-
- public function testWithForeignKeys()
- {
- $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u');
- $this->assertEquals('SELECT c0_.id AS id0, c0_.status AS status1, c0_.username AS username2, c0_.name AS name3, c0_.email_id AS email_id4 FROM cms_users c0_ GROUP BY c0_.id, c0_.status, c0_.username, c0_.name', $query->getSQL());
-
- $query = $this->_em->createQuery('SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmployee e GROUP BY e');
- $this->assertEquals('SELECT c0_.id AS id0, c0_.name AS name1, c0_.spouse_id AS spouse_id2 FROM cms_employees c0_ GROUP BY c0_.id, c0_.name', $query->getSQL());
- }
public function loadFixtures()
- {
+ {
$o1 = new DDC1430Order('NEW');
$o2 = new DDC1430Order('OK');
View
16 tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php
@@ -1317,6 +1317,22 @@ public function testSelectWithArithmeticExpressionBeforeField()
'SELECT d0_.id AS id0, +d0_.value AS sclr1 FROM DDC1474Entity d0_'
);
}
+
+ /**
+ * @group DDC-1430
+ */
+ public function testGroupByAllFieldsWhenObjectHasForeignKeys()
+ {
+ $this->assertSqlGeneration(
+ 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u',
+ 'SELECT c0_.id AS id0, c0_.status AS status1, c0_.username AS username2, c0_.name AS name3 FROM cms_users c0_ GROUP BY c0_.id, c0_.status, c0_.username, c0_.name, c0_.email_id'
+ );
+
+ $this->assertSqlGeneration(
+ 'SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmployee e GROUP BY e',
+ 'SELECT c0_.id AS id0, c0_.name AS name1 FROM cms_employees c0_ GROUP BY c0_.id, c0_.name, c0_.spouse_id'
+ );
+ }
}
Please sign in to comment.
Something went wrong with that request. Please try again.