add MAX and MIN to functionbuilder
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
6d20876eb2
commit
8ef5a366ec
|
@ -76,4 +76,12 @@ class FunctionBuilder implements IFunctionBuilder {
|
||||||
$alias = $alias ? (' AS ' . $this->helper->quoteColumnName($alias)) : '';
|
$alias = $alias ? (' AS ' . $this->helper->quoteColumnName($alias)) : '';
|
||||||
return new QueryFunction('COUNT(' . $this->helper->quoteColumnName($count) . ')' . $alias);
|
return new QueryFunction('COUNT(' . $this->helper->quoteColumnName($count) . ')' . $alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function max($field) {
|
||||||
|
return new QueryFunction('MAX(' . $this->helper->quoteColumnName($field) . ')');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function min($field) {
|
||||||
|
return new QueryFunction('MIN(' . $this->helper->quoteColumnName($field) . ')');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,4 +105,24 @@ interface IFunctionBuilder {
|
||||||
* @since 14.0.0
|
* @since 14.0.0
|
||||||
*/
|
*/
|
||||||
public function count($count, $alias = '');
|
public function count($count, $alias = '');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes the maximum of all rows in a column
|
||||||
|
*
|
||||||
|
* @param mixed $field the column to maximum
|
||||||
|
*
|
||||||
|
* @return IQueryFunction
|
||||||
|
* @since 18.0.0
|
||||||
|
*/
|
||||||
|
public function max($field);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes the minimum of all rows in a column
|
||||||
|
*
|
||||||
|
* @param mixed $field the column to minimum
|
||||||
|
*
|
||||||
|
* @return IQueryFunction
|
||||||
|
* @since 18.0.0
|
||||||
|
*/
|
||||||
|
public function min($field);
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,4 +120,82 @@ class FunctionBuilderTest extends TestCase {
|
||||||
|
|
||||||
$this->assertGreaterThan(1, $query->execute()->fetchColumn());
|
$this->assertGreaterThan(1, $query->execute()->fetchColumn());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function setUpMinMax($value) {
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->insert('appconfig')
|
||||||
|
->values([
|
||||||
|
'appid' => $query->createNamedParameter('minmax'),
|
||||||
|
'configkey' => $query->createNamedParameter(uniqid()),
|
||||||
|
'configvalue' => $query->createNamedParameter((string)$value),
|
||||||
|
]);
|
||||||
|
$query->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function clearMinMax() {
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->delete('appconfig')
|
||||||
|
->where($query->expr()->eq('appid', $query->createNamedParameter('minmax')));
|
||||||
|
$query->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMaxEmpty() {
|
||||||
|
$this->clearMinMax();
|
||||||
|
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->select($query->func()->max($query->expr()->castColumn('configvalue', IQueryBuilder::PARAM_INT)));
|
||||||
|
$query->from('appconfig')
|
||||||
|
->where($query->expr()->eq('appid', $query->createNamedParameter('minmax')))
|
||||||
|
->setMaxResults(1);
|
||||||
|
|
||||||
|
$this->assertEquals(null, $query->execute()->fetchColumn());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMinEmpty() {
|
||||||
|
$this->clearMinMax();
|
||||||
|
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->select($query->func()->min($query->expr()->castColumn('configvalue', IQueryBuilder::PARAM_INT)));
|
||||||
|
$query->from('appconfig')
|
||||||
|
->where($query->expr()->eq('appid', $query->createNamedParameter('minmax')))
|
||||||
|
->setMaxResults(1);
|
||||||
|
|
||||||
|
$this->assertEquals(null, $query->execute()->fetchColumn());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMax() {
|
||||||
|
$this->clearMinMax();
|
||||||
|
$this->setUpMinMax(10);
|
||||||
|
$this->setUpMinMax(11);
|
||||||
|
$this->setUpMinMax(20);
|
||||||
|
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->select($query->func()->max($query->expr()->castColumn('configvalue', IQueryBuilder::PARAM_INT)));
|
||||||
|
$query->from('appconfig')
|
||||||
|
->where($query->expr()->eq('appid', $query->createNamedParameter('minmax')))
|
||||||
|
->setMaxResults(1);
|
||||||
|
|
||||||
|
$this->assertEquals(20, $query->execute()->fetchColumn());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMin() {
|
||||||
|
$this->clearMinMax();
|
||||||
|
$this->setUpMinMax(10);
|
||||||
|
$this->setUpMinMax(11);
|
||||||
|
$this->setUpMinMax(20);
|
||||||
|
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
|
||||||
|
$query->select($query->func()->min($query->expr()->castColumn('configvalue', IQueryBuilder::PARAM_INT)));
|
||||||
|
$query->from('appconfig')
|
||||||
|
->where($query->expr()->eq('appid', $query->createNamedParameter('minmax')))
|
||||||
|
->setMaxResults(1);
|
||||||
|
|
||||||
|
$this->assertEquals(10, $query->execute()->fetchColumn());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue