123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php
- declare(strict_types=1);
- /**
- * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>
- *
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- namespace OC\DB;
- use Doctrine\DBAL\Exception;
- use Doctrine\DBAL\Platforms\AbstractPlatform;
- use Doctrine\DBAL\Platforms\MySQLPlatform;
- use Doctrine\DBAL\Platforms\OraclePlatform;
- use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
- use Doctrine\DBAL\Platforms\SqlitePlatform;
- use Doctrine\DBAL\Schema\Schema;
- use OC\DB\Exceptions\DbalException;
- use OCP\DB\IPreparedStatement;
- use OCP\DB\IResult;
- use OCP\DB\QueryBuilder\IQueryBuilder;
- use OCP\IDBConnection;
- /**
- * Adapts the public API to our internal DBAL connection wrapper
- */
- class ConnectionAdapter implements IDBConnection {
- /** @var Connection */
- private $inner;
- public function __construct(Connection $inner) {
- $this->inner = $inner;
- }
- public function getQueryBuilder(): IQueryBuilder {
- return $this->inner->getQueryBuilder();
- }
- public function prepare($sql, $limit = null, $offset = null): IPreparedStatement {
- try {
- return new PreparedStatement(
- $this->inner->prepare($sql, $limit, $offset)
- );
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function executeQuery(string $sql, array $params = [], $types = []): IResult {
- try {
- return new ResultAdapter(
- $this->inner->executeQuery($sql, $params, $types)
- );
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function executeUpdate(string $sql, array $params = [], array $types = []): int {
- try {
- return $this->inner->executeUpdate($sql, $params, $types);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function executeStatement($sql, array $params = [], array $types = []): int {
- try {
- return $this->inner->executeStatement($sql, $params, $types);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function lastInsertId(string $table): int {
- try {
- return $this->inner->lastInsertId($table);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function insertIfNotExist(string $table, array $input, ?array $compare = null) {
- try {
- return $this->inner->insertIfNotExist($table, $input, $compare);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function insertIgnoreConflict(string $table, array $values): int {
- try {
- return $this->inner->insertIgnoreConflict($table, $values);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function setValues($table, array $keys, array $values, array $updatePreconditionValues = []): int {
- try {
- return $this->inner->setValues($table, $keys, $values, $updatePreconditionValues);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function lockTable($tableName): void {
- try {
- $this->inner->lockTable($tableName);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function unlockTable(): void {
- try {
- $this->inner->unlockTable();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function beginTransaction(): void {
- try {
- $this->inner->beginTransaction();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function inTransaction(): bool {
- return $this->inner->inTransaction();
- }
- public function commit(): void {
- try {
- $this->inner->commit();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function rollBack(): void {
- try {
- $this->inner->rollBack();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function getError(): string {
- return $this->inner->getError();
- }
- public function errorCode() {
- return $this->inner->errorCode();
- }
- public function errorInfo() {
- return $this->inner->errorInfo();
- }
- public function connect(): bool {
- try {
- return $this->inner->connect();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function close(): void {
- $this->inner->close();
- }
- public function quote($input, $type = IQueryBuilder::PARAM_STR) {
- return $this->inner->quote($input, $type);
- }
- /**
- * @todo we are leaking a 3rdparty type here
- */
- public function getDatabasePlatform(): AbstractPlatform {
- return $this->inner->getDatabasePlatform();
- }
- public function dropTable(string $table): void {
- try {
- $this->inner->dropTable($table);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function tableExists(string $table): bool {
- try {
- return $this->inner->tableExists($table);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function escapeLikeParameter(string $param): string {
- return $this->inner->escapeLikeParameter($param);
- }
- public function supports4ByteText(): bool {
- return $this->inner->supports4ByteText();
- }
- /**
- * @todo leaks a 3rdparty type
- */
- public function createSchema(): Schema {
- try {
- return $this->inner->createSchema();
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function migrateToSchema(Schema $toSchema): void {
- try {
- $this->inner->migrateToSchema($toSchema);
- } catch (Exception $e) {
- throw DbalException::wrap($e);
- }
- }
- public function getInner(): Connection {
- return $this->inner;
- }
- public function getDatabaseProvider(): string {
- $platform = $this->inner->getDatabasePlatform();
- if ($platform instanceof MySQLPlatform) {
- return IDBConnection::PLATFORM_MYSQL;
- } elseif ($platform instanceof OraclePlatform) {
- return IDBConnection::PLATFORM_ORACLE;
- } elseif ($platform instanceof PostgreSQLPlatform) {
- return IDBConnection::PLATFORM_POSTGRES;
- } elseif ($platform instanceof SqlitePlatform) {
- return IDBConnection::PLATFORM_SQLITE;
- } else {
- throw new \Exception('Database ' . $platform::class . ' not supported');
- }
- }
- }
|