2021-01-03 09:28:31 -05:00
< ? php
declare ( strict_types = 1 );
2021-06-04 15:52:51 -04:00
/**
2024-05-23 03:26:56 -04:00
* SPDX - FileCopyrightText : 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
2021-01-03 09:28:31 -05:00
*/
namespace OC\DB ;
2021-01-12 06:24:36 -05:00
use Doctrine\DBAL\Exception ;
2021-01-03 09:28:31 -05:00
use Doctrine\DBAL\Platforms\AbstractPlatform ;
2023-09-14 08:59:06 -04:00
use Doctrine\DBAL\Platforms\MySQLPlatform ;
use Doctrine\DBAL\Platforms\OraclePlatform ;
use Doctrine\DBAL\Platforms\PostgreSQLPlatform ;
2024-06-28 09:49:18 -04:00
use Doctrine\DBAL\Platforms\SQLitePlatform ;
2021-01-03 09:28:31 -05:00
use Doctrine\DBAL\Schema\Schema ;
2021-01-12 06:24:36 -05:00
use OC\DB\Exceptions\DbalException ;
2021-01-03 09:28:31 -05:00
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 {
2024-07-02 05:10:52 -04:00
public function __construct (
protected Connection $inner ,
) {
2021-01-03 09:28:31 -05:00
}
public function getQueryBuilder () : IQueryBuilder {
return $this -> inner -> getQueryBuilder ();
}
public function prepare ( $sql , $limit = null , $offset = null ) : IPreparedStatement {
2021-01-12 06:24:36 -05:00
try {
return new PreparedStatement (
$this -> inner -> prepare ( $sql , $limit , $offset )
);
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function executeQuery ( string $sql , array $params = [], $types = []) : IResult {
2021-01-12 06:24:36 -05:00
try {
return new ResultAdapter (
$this -> inner -> executeQuery ( $sql , $params , $types )
);
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function executeUpdate ( string $sql , array $params = [], array $types = []) : int {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> executeUpdate ( $sql , $params , $types );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function executeStatement ( $sql , array $params = [], array $types = []) : int {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> executeStatement ( $sql , $params , $types );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function lastInsertId ( string $table ) : int {
2021-01-12 06:24:36 -05:00
try {
2022-12-01 07:28:11 -05:00
return $this -> inner -> lastInsertId ( $table );
2021-01-12 06:24:36 -05:00
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
2024-03-28 11:13:19 -04:00
public function insertIfNotExist ( string $table , array $input , ? array $compare = null ) {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> insertIfNotExist ( $table , $input , $compare );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function insertIgnoreConflict ( string $table , array $values ) : int {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> insertIgnoreConflict ( $table , $values );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function setValues ( $table , array $keys , array $values , array $updatePreconditionValues = []) : int {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> setValues ( $table , $keys , $values , $updatePreconditionValues );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function lockTable ( $tableName ) : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> lockTable ( $tableName );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function unlockTable () : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> unlockTable ();
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function beginTransaction () : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> beginTransaction ();
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function inTransaction () : bool {
return $this -> inner -> inTransaction ();
}
public function commit () : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> commit ();
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function rollBack () : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> rollBack ();
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
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 {
2021-01-12 06:24:36 -05:00
try {
2024-07-02 05:10:52 -04:00
$this -> inner -> connect ();
return true ;
2021-01-12 06:24:36 -05:00
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function close () : void {
$this -> inner -> close ();
}
2024-07-02 05:11:45 -04:00
/**
* @ param mixed $input
* @ param int $type
* @ deprecated 30.0 . 0 Only strings are supported as database type in the end and the $type parameter is ignored going forward
*/
2021-01-03 09:28:31 -05:00
public function quote ( $input , $type = IQueryBuilder :: PARAM_STR ) {
2024-07-02 05:11:45 -04:00
if ( $type !== IQueryBuilder :: PARAM_STR ) {
\OC :: $server -> getLogger () -> debug ( 'Parameter $type is no longer supported and the function only handles resulting database type string' , [ 'exception' => new \InvalidArgumentException ( '$type parameter is no longer supported' )]);
}
return $this -> inner -> getDatabasePlatform () -> quoteStringLiteral ( $input );
2021-01-03 09:28:31 -05:00
}
/**
* @ todo we are leaking a 3 rdparty type here
2024-07-02 05:10:12 -04:00
* @ deprecated 30.0 . 0 Use { @ see getDatabaseProvider ()} instead
2021-01-03 09:28:31 -05:00
*/
public function getDatabasePlatform () : AbstractPlatform {
return $this -> inner -> getDatabasePlatform ();
}
public function dropTable ( string $table ) : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> dropTable ( $table );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function tableExists ( string $table ) : bool {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> tableExists ( $table );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function escapeLikeParameter ( string $param ) : string {
return $this -> inner -> escapeLikeParameter ( $param );
}
public function supports4ByteText () : bool {
return $this -> inner -> supports4ByteText ();
}
/**
* @ todo leaks a 3 rdparty type
*/
public function createSchema () : Schema {
2021-01-12 06:24:36 -05:00
try {
return $this -> inner -> createSchema ();
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function migrateToSchema ( Schema $toSchema ) : void {
2021-01-12 06:24:36 -05:00
try {
$this -> inner -> migrateToSchema ( $toSchema );
} catch ( Exception $e ) {
throw DbalException :: wrap ( $e );
}
2021-01-03 09:28:31 -05:00
}
public function getInner () : Connection {
return $this -> inner ;
}
2023-09-14 08:59:06 -04:00
2024-07-04 02:55:05 -04:00
/**
* @ return self :: PLATFORM_MYSQL | self :: PLATFORM_ORACLE | self :: PLATFORM_POSTGRES | self :: PLATFORM_SQLITE
*/
2023-09-14 08:59:06 -04:00
public function getDatabaseProvider () : string {
2024-07-04 02:55:05 -04:00
return $this -> inner -> getDatabaseProvider ();
2023-09-14 08:59:06 -04:00
}
2021-01-03 09:28:31 -05:00
}