Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion apps/settings/lib/SetupChecks/SupportedDatabase.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class SupportedDatabase implements ISetupCheck {
private const MAX_MYSQL = '8.4';
private const MIN_POSTGRES = '13';
private const MAX_POSTGRES = '17';
private const MIN_ORACLE = '12.2';
private const MAX_ORACLE = '26';

public function __construct(
private IL10N $l10n,
Expand Down Expand Up @@ -112,7 +114,29 @@ public function run(): SetupResult {
);
}
} elseif ($databasePlatform instanceof OraclePlatform) {
$version = 'Oracle';
$result = $this->connection->executeQuery('SELECT VERSION FROM PRODUCT_COMPONENT_VERSION');
$version = $result->fetchOne();
$result->closeCursor();
$versionLower = strtolower($version);
// we only care about X.Y not X.Y.Z differences
[$major, $minor, ] = explode('.', $versionLower);
$versionConcern = $major . '.' . $minor;
if (version_compare($versionConcern, self::MIN_ORACLE, '<') || version_compare($versionConcern, self::MAX_ORACLE, '>')) {
$extendedWarning = '';
if (version_compare($versionConcern, self::MIN_ORACLE, '<')) {
$extendedWarning = "\n" . $this->l10n->t('Nextcloud %d does not support your current version, so be sure to update the database before updating your Nextcloud Server.', [33]);
}
return SetupResult::warning(
$this->l10n->t(
'Oracle version "%1$s" detected. Oracle >=%2$s and <=%3$s is suggested for best performance, stability and functionality with this version of Nextcloud.',
[
$version,
self::MIN_ORACLE,
self::MAX_ORACLE,
])
. $extendedWarning
);
}
} elseif ($databasePlatform instanceof SqlitePlatform) {
return SetupResult::warning(
$this->l10n->t('SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend. This is particularly recommended when using the desktop client for file synchronisation. To migrate to another database use the command line tool: "occ db:convert-type".'),
Expand Down
15 changes: 11 additions & 4 deletions apps/settings/tests/SetupChecks/SupportedDatabaseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,18 @@ protected function setUp(): void {
}

public function testPass(): void {
$severities = [SetupResult::SUCCESS, SetupResult::INFO];
if ($this->connection->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE) {
/** SQlite always gets a warning */
$this->assertEquals(SetupResult::WARNING, $this->check->run()->getSeverity());
} else {
$this->assertContains($this->check->run()->getSeverity(), [SetupResult::SUCCESS, SetupResult::INFO]);
$severities = [SetupResult::WARNING];
} elseif ($this->connection->getDatabaseProvider(true) === IDBConnection::PLATFORM_ORACLE) {
$result = $this->connection->executeQuery('SELECT VERSION FROM PRODUCT_COMPONENT_VERSION');
$version = $result->fetchOne();
$result->closeCursor();
if (str_starts_with($version, '11.')) {
$severities = [SetupResult::WARNING];
}
}

$this->assertContains($this->check->run()->getSeverity(), $severities, 'Oracle 11 and SQLite expect a warning, other databases should be success or info only');
}
}
Loading