diff options
-rw-r--r-- | lib/private/DB/QueryBuilder/QueryBuilder.php | 37 | ||||
-rw-r--r-- | lib/public/DB/QueryBuilder/IQueryBuilder.php | 23 |
2 files changed, 60 insertions, 0 deletions
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php index aa0327e89d9..83b233ac1b5 100644 --- a/lib/private/DB/QueryBuilder/QueryBuilder.php +++ b/lib/private/DB/QueryBuilder/QueryBuilder.php @@ -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. * diff --git a/lib/public/DB/QueryBuilder/IQueryBuilder.php b/lib/public/DB/QueryBuilder/IQueryBuilder.php index 0a5d42e48c5..91ffab02f48 100644 --- a/lib/public/DB/QueryBuilder/IQueryBuilder.php +++ b/lib/public/DB/QueryBuilder/IQueryBuilder.php @@ -159,10 +159,33 @@ 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. * * <code> |