Merge pull request #24163 from nextcloud/techdebt/noid/add-types-to-function-builder

Add types to function builder
This commit is contained in:
Roeland Jago Douma 2020-11-17 10:12:55 +01:00 committed by GitHub
commit b24b74f03b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 70 deletions

View File

@ -27,8 +27,6 @@ namespace OC\DB\QueryBuilder\FunctionBuilder;
use OC\DB\QueryBuilder\QueryFunction; use OC\DB\QueryBuilder\QueryFunction;
use OC\DB\QueryBuilder\QuoteHelper; use OC\DB\QueryBuilder\QuoteHelper;
use OCP\DB\QueryBuilder\IFunctionBuilder; use OCP\DB\QueryBuilder\IFunctionBuilder;
use OCP\DB\QueryBuilder\ILiteral;
use OCP\DB\QueryBuilder\IParameter;
use OCP\DB\QueryBuilder\IQueryFunction; use OCP\DB\QueryBuilder\IQueryFunction;
class FunctionBuilder implements IFunctionBuilder { class FunctionBuilder implements IFunctionBuilder {
@ -44,15 +42,15 @@ class FunctionBuilder implements IFunctionBuilder {
$this->helper = $helper; $this->helper = $helper;
} }
public function md5($input) { public function md5($input): IQueryFunction {
return new QueryFunction('MD5(' . $this->helper->quoteColumnName($input) . ')'); return new QueryFunction('MD5(' . $this->helper->quoteColumnName($input) . ')');
} }
public function concat($x, $y) { public function concat($x, $y): IQueryFunction {
return new QueryFunction('CONCAT(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('CONCAT(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
} }
public function substring($input, $start, $length = null) { public function substring($input, $start, $length = null): IQueryFunction {
if ($length) { if ($length) {
return new QueryFunction('SUBSTR(' . $this->helper->quoteColumnName($input) . ', ' . $this->helper->quoteColumnName($start) . ', ' . $this->helper->quoteColumnName($length) . ')'); return new QueryFunction('SUBSTR(' . $this->helper->quoteColumnName($input) . ', ' . $this->helper->quoteColumnName($start) . ', ' . $this->helper->quoteColumnName($length) . ')');
} else { } else {
@ -60,51 +58,41 @@ class FunctionBuilder implements IFunctionBuilder {
} }
} }
public function sum($field) { public function sum($field): IQueryFunction {
return new QueryFunction('SUM(' . $this->helper->quoteColumnName($field) . ')'); return new QueryFunction('SUM(' . $this->helper->quoteColumnName($field) . ')');
} }
public function lower($field) { public function lower($field): IQueryFunction {
return new QueryFunction('LOWER(' . $this->helper->quoteColumnName($field) . ')'); return new QueryFunction('LOWER(' . $this->helper->quoteColumnName($field) . ')');
} }
public function add($x, $y) { public function add($x, $y): IQueryFunction {
return new QueryFunction($this->helper->quoteColumnName($x) . ' + ' . $this->helper->quoteColumnName($y)); return new QueryFunction($this->helper->quoteColumnName($x) . ' + ' . $this->helper->quoteColumnName($y));
} }
public function subtract($x, $y) { public function subtract($x, $y): IQueryFunction {
return new QueryFunction($this->helper->quoteColumnName($x) . ' - ' . $this->helper->quoteColumnName($y)); return new QueryFunction($this->helper->quoteColumnName($x) . ' - ' . $this->helper->quoteColumnName($y));
} }
public function count($count = '', $alias = '') { public function count($count = '', $alias = ''): IQueryFunction {
$alias = $alias ? (' AS ' . $this->helper->quoteColumnName($alias)) : ''; $alias = $alias ? (' AS ' . $this->helper->quoteColumnName($alias)) : '';
$quotedName = $count === '' ? '*' : $this->helper->quoteColumnName($count); $quotedName = $count === '' ? '*' : $this->helper->quoteColumnName($count);
return new QueryFunction('COUNT(' . $quotedName . ')' . $alias); return new QueryFunction('COUNT(' . $quotedName . ')' . $alias);
} }
public function max($field) { public function max($field): IQueryFunction {
return new QueryFunction('MAX(' . $this->helper->quoteColumnName($field) . ')'); return new QueryFunction('MAX(' . $this->helper->quoteColumnName($field) . ')');
} }
public function min($field) { public function min($field): IQueryFunction {
return new QueryFunction('MIN(' . $this->helper->quoteColumnName($field) . ')'); return new QueryFunction('MIN(' . $this->helper->quoteColumnName($field) . ')');
} }
/** public function greatest($x, $y): IQueryFunction {
* @param string|ILiteral|IParameter|IQueryFunction $x
* @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction
*/
public function greatest($x, $y) {
return new QueryFunction('GREATEST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('GREATEST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
} }
/** public function least($x, $y): IQueryFunction {
* @param string|ILiteral|IParameter|IQueryFunction $x
* @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction
*/
public function least($x, $y) {
return new QueryFunction('LEAST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('LEAST(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
} }
} }

View File

@ -29,7 +29,7 @@ use OCP\DB\QueryBuilder\IParameter;
use OCP\DB\QueryBuilder\IQueryFunction; use OCP\DB\QueryBuilder\IQueryFunction;
class OCIFunctionBuilder extends FunctionBuilder { class OCIFunctionBuilder extends FunctionBuilder {
public function md5($input) { public function md5($input): IQueryFunction {
return new QueryFunction('LOWER(DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(' . $this->helper->quoteColumnName($input) .')))'); return new QueryFunction('LOWER(DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(' . $this->helper->quoteColumnName($input) .')))');
} }
@ -45,7 +45,7 @@ class OCIFunctionBuilder extends FunctionBuilder {
* @param string|ILiteral|IParameter|IQueryFunction $y * @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction * @return IQueryFunction
*/ */
public function greatest($x, $y) { public function greatest($x, $y): IQueryFunction {
if (is_string($y) || $y instanceof IQueryFunction) { if (is_string($y) || $y instanceof IQueryFunction) {
return parent::greatest($y, $x); return parent::greatest($y, $x);
} }
@ -65,7 +65,7 @@ class OCIFunctionBuilder extends FunctionBuilder {
* @param string|ILiteral|IParameter|IQueryFunction $y * @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction * @return IQueryFunction
*/ */
public function least($x, $y) { public function least($x, $y): IQueryFunction {
if (is_string($y) || $y instanceof IQueryFunction) { if (is_string($y) || $y instanceof IQueryFunction) {
return parent::least($y, $x); return parent::least($y, $x);
} }

View File

@ -25,9 +25,10 @@
namespace OC\DB\QueryBuilder\FunctionBuilder; namespace OC\DB\QueryBuilder\FunctionBuilder;
use OC\DB\QueryBuilder\QueryFunction; use OC\DB\QueryBuilder\QueryFunction;
use OCP\DB\QueryBuilder\IQueryFunction;
class PgSqlFunctionBuilder extends FunctionBuilder { class PgSqlFunctionBuilder extends FunctionBuilder {
public function concat($x, $y) { public function concat($x, $y): IQueryFunction {
return new QueryFunction('(' . $this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('(' . $this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y) . ')');
} }
} }

View File

@ -25,30 +25,18 @@
namespace OC\DB\QueryBuilder\FunctionBuilder; namespace OC\DB\QueryBuilder\FunctionBuilder;
use OC\DB\QueryBuilder\QueryFunction; use OC\DB\QueryBuilder\QueryFunction;
use OCP\DB\QueryBuilder\ILiteral;
use OCP\DB\QueryBuilder\IParameter;
use OCP\DB\QueryBuilder\IQueryFunction; use OCP\DB\QueryBuilder\IQueryFunction;
class SqliteFunctionBuilder extends FunctionBuilder { class SqliteFunctionBuilder extends FunctionBuilder {
public function concat($x, $y) { public function concat($x, $y): IQueryFunction {
return new QueryFunction('(' . $this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('(' . $this->helper->quoteColumnName($x) . ' || ' . $this->helper->quoteColumnName($y) . ')');
} }
/** public function greatest($x, $y): IQueryFunction {
* @param string|ILiteral|IParameter|IQueryFunction $x
* @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction
*/
public function greatest($x, $y) {
return new QueryFunction('MAX(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('MAX(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
} }
/** public function least($x, $y): IQueryFunction {
* @param string|ILiteral|IParameter|IQueryFunction $x
* @param string|ILiteral|IParameter|IQueryFunction $y
* @return IQueryFunction
*/
public function least($x, $y) {
return new QueryFunction('MIN(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')'); return new QueryFunction('MIN(' . $this->helper->quoteColumnName($x) . ', ' . $this->helper->quoteColumnName($y) . ')');
} }
} }

View File

@ -34,103 +34,103 @@ interface IFunctionBuilder {
/** /**
* Calculates the MD5 hash of a given input * Calculates the MD5 hash of a given input
* *
* @param mixed $input The input to be hashed * @param string|ILiteral|IParameter|IQueryFunction $input The input to be hashed
* *
* @return IQueryFunction * @return IQueryFunction
* @since 12.0.0 * @since 12.0.0
*/ */
public function md5($input); public function md5($input): IQueryFunction;
/** /**
* Combines two input strings * Combines two input strings
* *
* @param mixed $x The first input string * @param string|ILiteral|IParameter|IQueryFunction $x The first input string
* @param mixed $y The seccond input string * @param string|ILiteral|IParameter|IQueryFunction $y The seccond input string
* *
* @return IQueryFunction * @return IQueryFunction
* @since 12.0.0 * @since 12.0.0
*/ */
public function concat($x, $y); public function concat($x, $y): IQueryFunction;
/** /**
* Takes a substring from the input string * Takes a substring from the input string
* *
* @param mixed $input The input string * @param string|ILiteral|IParameter|IQueryFunction $input The input string
* @param mixed $start The start of the substring, note that counting starts at 1 * @param string|ILiteral|IParameter|IQueryFunction $start The start of the substring, note that counting starts at 1
* @param mixed $length The length of the substring * @param null|ILiteral|IParameter|IQueryFunction $length The length of the substring
* *
* @return IQueryFunction * @return IQueryFunction
* @since 12.0.0 * @since 12.0.0
*/ */
public function substring($input, $start, $length = null); public function substring($input, $start, $length = null): IQueryFunction;
/** /**
* Takes the sum of all rows in a column * Takes the sum of all rows in a column
* *
* @param mixed $field the column to sum * @param string|ILiteral|IParameter|IQueryFunction $field the column to sum
* *
* @return IQueryFunction * @return IQueryFunction
* @since 12.0.0 * @since 12.0.0
*/ */
public function sum($field); public function sum($field): IQueryFunction;
/** /**
* Transforms a string field or value to lower case * Transforms a string field or value to lower case
* *
* @param mixed $field * @param string|ILiteral|IParameter|IQueryFunction $field
* @return IQueryFunction * @return IQueryFunction
* @since 14.0.0 * @since 14.0.0
*/ */
public function lower($field); public function lower($field): IQueryFunction;
/** /**
* @param mixed $x The first input field or number * @param string|ILiteral|IParameter|IQueryFunction $x The first input field or number
* @param mixed $y The second input field or number * @param string|ILiteral|IParameter|IQueryFunction $y The second input field or number
* @return IQueryFunction * @return IQueryFunction
* @since 14.0.0 * @since 14.0.0
*/ */
public function add($x, $y); public function add($x, $y): IQueryFunction;
/** /**
* @param mixed $x The first input field or number * @param string|ILiteral|IParameter|IQueryFunction $x The first input field or number
* @param mixed $y The second input field or number * @param string|ILiteral|IParameter|IQueryFunction $y The second input field or number
* @return IQueryFunction * @return IQueryFunction
* @since 14.0.0 * @since 14.0.0
*/ */
public function subtract($x, $y); public function subtract($x, $y): IQueryFunction;
/** /**
* @param mixed $count The input to be counted * @param string|ILiteral|IParameter|IQueryFunction $count The input to be counted
* @param string $alias Alias for the counter * @param string $alias Alias for the counter
* *
* @return IQueryFunction * @return IQueryFunction
* @since 14.0.0 * @since 14.0.0
*/ */
public function count($count = '', $alias = ''); public function count($count = '', $alias = ''): IQueryFunction;
/** /**
* Takes the maximum of all rows in a column * 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 * 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 * @param string|ILiteral|IParameter|IQueryFunction $field the column to maximum
* *
* @return IQueryFunction * @return IQueryFunction
* @since 18.0.0 * @since 18.0.0
*/ */
public function max($field); public function max($field): IQueryFunction;
/** /**
* Takes the minimum of all rows in a column * 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 * 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 * @param string|ILiteral|IParameter|IQueryFunction $field the column to minimum
* *
* @return IQueryFunction * @return IQueryFunction
* @since 18.0.0 * @since 18.0.0
*/ */
public function min($field); public function min($field): IQueryFunction;
/** /**
* Takes the maximum of multiple values * Takes the maximum of multiple values
@ -142,7 +142,7 @@ interface IFunctionBuilder {
* @return IQueryFunction * @return IQueryFunction
* @since 18.0.0 * @since 18.0.0
*/ */
public function greatest($x, $y); public function greatest($x, $y): IQueryFunction;
/** /**
* Takes the minimum of multiple values * Takes the minimum of multiple values
@ -154,5 +154,5 @@ interface IFunctionBuilder {
* @return IQueryFunction * @return IQueryFunction
* @since 18.0.0 * @since 18.0.0
*/ */
public function least($x, $y); public function least($x, $y): IQueryFunction;
} }