Browse Source
add LEAST and GREATER to db function builder
Signed-off-by: Robin Appelman <robin@icewind.nl>
pull/17833/head
Robin Appelman
6 years ago
committed by
Roeland Jago Douma
No known key found for this signature in database
GPG Key ID: F941078878347C0C
4 changed files with
67 additions and
0 deletions
-
lib/private/DB/QueryBuilder/FunctionBuilder/FunctionBuilder.php
-
lib/private/DB/QueryBuilder/FunctionBuilder/SqliteFunctionBuilder.php
-
lib/public/DB/QueryBuilder/IFunctionBuilder.php
-
tests/lib/DB/QueryBuilder/FunctionBuilderTest.php
|
|
|
@ -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()); |
|
|
|
} |
|
|
|
} |