mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
enh(db): provide database providers via API
To avoid leaking internals (OC), wrap the getDatabasePlatform and provide the associated constants fixes https://github.com/nextcloud/server/issues/30877 Signed-off-by: Anna Larch <anna@nextcloud.com>
This commit is contained in:
parent
8157d97890
commit
56419d94f8
3 changed files with 41 additions and 2 deletions
|
|
@ -641,7 +641,7 @@ Raw output
|
|||
|
||||
protected function hasValidTransactionIsolationLevel(): bool {
|
||||
try {
|
||||
if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
|
||||
if ($this->connection->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -839,7 +839,7 @@ Raw output
|
|||
];
|
||||
|
||||
$schema = new SchemaWrapper($this->db);
|
||||
$isSqlite = $this->db->getDatabasePlatform() instanceof SqlitePlatform;
|
||||
$isSqlite = $this->connection->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE;
|
||||
$pendingColumns = [];
|
||||
|
||||
foreach ($tables as $tableName => $columns) {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,10 @@ 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;
|
||||
|
|
@ -242,4 +246,19 @@ class ConnectionAdapter implements IDBConnection {
|
|||
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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,18 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
|
|||
* @since 6.0.0
|
||||
*/
|
||||
interface IDBConnection {
|
||||
/* @since 28.0.0 */
|
||||
public const PLATFORM_MYSQL = 'mysql';
|
||||
|
||||
/* @since 28.0.0 */
|
||||
public const PLATFORM_ORACLE = 'oracle';
|
||||
|
||||
/* @since 28.0.0 */
|
||||
public const PLATFORM_POSTGRES = 'postgres';
|
||||
|
||||
/* @since 28.0.0 */
|
||||
public const PLATFORM_SQLITE = 'sqlite';
|
||||
|
||||
/**
|
||||
* Gets the QueryBuilder for the connection.
|
||||
*
|
||||
|
|
@ -339,4 +351,12 @@ interface IDBConnection {
|
|||
* @since 13.0.0
|
||||
*/
|
||||
public function migrateToSchema(Schema $toSchema): void;
|
||||
|
||||
/**
|
||||
* Returns the database provider name
|
||||
* @link https://github.com/nextcloud/server/issues/30877
|
||||
* @since 28.0.0
|
||||
* @return IDBConnection::PLATFORM_*
|
||||
*/
|
||||
public function getDatabaseProvider(): string;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue