allow selecting multiple columns with SELECT DISTINCT
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
8021bacbdc
commit
22bf656e02
|
@ -435,8 +435,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);
|
||||
|
|
Loading…
Reference in New Issue