Merge pull request #23665 from nextcloud/enh/querybuilder/execute_query_update

Add executeQuery and executeUpdate
This commit is contained in:
Roeland Jago Douma 2021-03-04 15:46:17 +01:00 committed by GitHub
commit 7b7358868d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 60 additions and 0 deletions

View File

@ -291,6 +291,43 @@ class QueryBuilder implements IQueryBuilder {
return new ResultAdapter($result);
}
public function executeQuery(): IResult {
if ($this->getType() !== \Doctrine\DBAL\Query\QueryBuilder::SELECT) {
throw new \RuntimeException('Invalid query type, expected SELECT query');
}
try {
$result = $this->execute();
} catch (\Doctrine\DBAL\Exception $e) {
throw \OC\DB\Exceptions\DbalException::wrap($e);
}
if ($result instanceof IResult) {
return $result;
}
throw new \RuntimeException('Invalid return type for query');
}
public function executeUpdate(): int {
if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::SELECT) {
throw new \RuntimeException('Invalid query type, expected INSERT, DELETE or UPDATE query');
}
try {
$result = $this->execute();
} catch (\Doctrine\DBAL\Exception $e) {
throw \OC\DB\Exceptions\DbalException::wrap($e);
}
if (!is_int($result)) {
throw new \RuntimeException('Invalid return type for query');
}
return $result;
}
/**
* Gets the complete SQL string formed by the current specifications of this QueryBuilder.
*

View File

@ -159,9 +159,32 @@ interface IQueryBuilder {
* @return IResult|int
* @throws Exception since 21.0.0
* @since 8.2.0
* @deprecated 22.0.0 Use executeQuery or executeUpdate
*/
public function execute();
/**
* Execute for select statements
*
* @return IResult
* @since 22.0.0
*
* @throws Exception
* @throws \RuntimeException in case of usage with non select query
*/
public function executeQuery(): IResult;
/**
* Execute for insert, update and delete statements
*
* @return int
* @since 22.0.0
*
* @throws Exception
* @throws \RuntimeException in case of usage with select query
*/
public function executeUpdate(): int;
/**
* Gets the complete SQL string formed by the current specifications of this QueryBuilder.
*