Signed-off-by: Robin Appelman <robin@icewind.nl>tags/v18.0.0beta1
@@ -85,4 +85,12 @@ class FunctionBuilder implements IFunctionBuilder { | |||
public function min($field) { | |||
return new QueryFunction('MIN(' . $this->helper->quoteColumnName($field) . ')'); | |||
} | |||
public function greatest($x, $y) { | |||
return new QueryFunction('GREATEST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); | |||
} | |||
public function least($x, $y) { | |||
return new QueryFunction('LEAST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); | |||
} | |||
} |
@@ -30,4 +30,13 @@ class SqliteFunctionBuilder extends FunctionBuilder { | |||
public function concat($x, $y) { | |||
return new QueryFunction('(' . $this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y) . ')'); | |||
} | |||
public function greatest($x, $y) { | |||
return new QueryFunction('MAX(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); | |||
} | |||
public function least($x, $y) { | |||
return new QueryFunction('MIN(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); | |||
} | |||
} |
@@ -109,6 +109,8 @@ interface IFunctionBuilder { | |||
/** | |||
* Takes the maximum of all rows in a column | |||
* | |||
* If you want to get the maximum value of multiple columns in the same row, use `greatest` instead | |||
* | |||
* @param mixed $field the column to maximum | |||
* | |||
* @return IQueryFunction | |||
@@ -119,10 +121,38 @@ interface IFunctionBuilder { | |||
/** | |||
* Takes the minimum of all rows in a column | |||
* | |||
* If you want to get the minimum value of multiple columns in the same row, use `least` instead | |||
* | |||
* @param mixed $field the column to minimum | |||
* | |||
* @return IQueryFunction | |||
* @since 18.0.0 | |||
*/ | |||
public function min($field); | |||
/** | |||
* Takes the maximum of multiple values | |||
* | |||
* If you want to get the maximum value of all rows in a column, use `max` instead | |||
* | |||
* @param mixed $x the first input field or number | |||
* @param mixed $y the first input field or number | |||
* | |||
* @return IQueryFunction | |||
* @since 18.0.0 | |||
*/ | |||
public function greatest($x, $y); | |||
/** | |||
* Takes the minimum of multiple values | |||
* | |||
* If you want to get the minimum value of all rows in a column, use `min` instead | |||
* | |||
* @param mixed $x the first input field or number | |||
* @param mixed $y the first input field or number | |||
* | |||
* @return IQueryFunction | |||
* @since 18.0.0 | |||
*/ | |||
public function least($x, $y); | |||
} |
@@ -198,4 +198,24 @@ class FunctionBuilderTest extends TestCase { | |||
$this->assertEquals(10, $query->execute()->fetchColumn()); | |||
} | |||
public function testGreatest() { | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->select($query->func()->greatest($query->createNamedParameter(2, IQueryBuilder::PARAM_INT), new Literal(1))); | |||
$query->from('appconfig') | |||
->setMaxResults(1); | |||
$this->assertEquals(2, $query->execute()->fetchColumn()); | |||
} | |||
public function testLeast() { | |||
$query = $this->connection->getQueryBuilder(); | |||
$query->select($query->func()->least($query->createNamedParameter(2, IQueryBuilder::PARAM_INT), new Literal(1))); | |||
$query->from('appconfig') | |||
->setMaxResults(1); | |||
$this->assertEquals(1, $query->execute()->fetchColumn()); | |||
} | |||
} |