diff options
Diffstat (limited to 'lib/private/DB/ResultAdapter.php')
-rw-r--r-- | lib/private/DB/ResultAdapter.php | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/private/DB/ResultAdapter.php b/lib/private/DB/ResultAdapter.php new file mode 100644 index 00000000000..95a7620e0ff --- /dev/null +++ b/lib/private/DB/ResultAdapter.php @@ -0,0 +1,61 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OC\DB; + +use Doctrine\DBAL\Result; +use OCP\DB\IResult; +use PDO; + +/** + * Adapts DBAL 2.6 API for DBAL 3.x for backwards compatibility of a leaked type + */ +class ResultAdapter implements IResult { + /** @var Result */ + private $inner; + + public function __construct(Result $inner) { + $this->inner = $inner; + } + + public function closeCursor(): bool { + $this->inner->free(); + + return true; + } + + public function fetch(int $fetchMode = PDO::FETCH_ASSOC) { + return match ($fetchMode) { + PDO::FETCH_ASSOC => $this->inner->fetchAssociative(), + PDO::FETCH_NUM => $this->inner->fetchNumeric(), + PDO::FETCH_COLUMN => $this->inner->fetchOne(), + default => throw new \Exception('Fetch mode needs to be assoc, num or column.'), + }; + } + + public function fetchAll(int $fetchMode = PDO::FETCH_ASSOC): array { + return match ($fetchMode) { + PDO::FETCH_ASSOC => $this->inner->fetchAllAssociative(), + PDO::FETCH_NUM => $this->inner->fetchAllNumeric(), + PDO::FETCH_COLUMN => $this->inner->fetchFirstColumn(), + default => throw new \Exception('Fetch mode needs to be assoc, num or column.'), + }; + } + + public function fetchColumn($columnIndex = 0) { + return $this->inner->fetchOne(); + } + + public function fetchOne() { + return $this->inner->fetchOne(); + } + + public function rowCount(): int { + return $this->inner->rowCount(); + } +} |