Skip to content
Snippets Groups Projects
Unverified Commit a61a757b authored by Robin Appelman's avatar Robin Appelman Committed by Joas Schilling
Browse files

allow selecting multiple columns with SELECT DISTINCT


Signed-off-by: default avatarRobin Appelman <robin@icewind.nl>
parent 426dc68b
No related branches found
No related tags found
No related merge requests found
......@@ -436,8 +436,14 @@ class QueryBuilder implements IQueryBuilder {
* @return $this This QueryBuilder instance.
*/
public function selectDistinct($select) {
if (!is_array($select)) {
$select = [$select];
}
$quotedSelect = $this->helper->quoteColumnNames($select);
$this->queryBuilder->addSelect(
'DISTINCT ' . $this->helper->quoteColumnName($select)
'DISTINCT ' . implode(', ', $quotedSelect)
);
return $this;
......
......@@ -314,6 +314,44 @@ class QueryBuilderTest extends \Test\TestCase {
$this->deleteTestingRows('testFirstResult2');
}
public function testSelectDistinctMultiple() {
$this->deleteTestingRows('testFirstResult1');
$this->deleteTestingRows('testFirstResult2');
$this->createTestingRows('testFirstResult1');
$this->createTestingRows('testFirstResult2');
$this->queryBuilder->selectDistinct(['appid', 'configkey']);
$this->queryBuilder->from('*PREFIX*appconfig')
->where($this->queryBuilder->expr()->eq(
'appid',
$this->queryBuilder->expr()->literal('testFirstResult1')
))
->orderBy('appid', 'DESC');
$query = $this->queryBuilder->execute();
$rows = $query->fetchAll();
$query->closeCursor();
$this->assertEquals(
[
['appid' => 'testFirstResult1', 'configkey' => 'testing1'],
['appid' => 'testFirstResult1', 'configkey' => 'testing2'],
['appid' => 'testFirstResult1', 'configkey' => 'testing3'],
['appid' => 'testFirstResult1', 'configkey' => 'testing4'],
['appid' => 'testFirstResult1', 'configkey' => 'testing5'],
['appid' => 'testFirstResult1', 'configkey' => 'testing6'],
['appid' => 'testFirstResult1', 'configkey' => 'testing7'],
['appid' => 'testFirstResult1', 'configkey' => 'testing8'],
['appid' => 'testFirstResult1', 'configkey' => 'testing9'],
],
$rows
);
$this->deleteTestingRows('testFirstResult1');
$this->deleteTestingRows('testFirstResult2');
}
public function dataAddSelect() {
$config = $this->createMock(SystemConfig::class);
$logger = $this->createMock(ILogger::class);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment