From 76d35e49edcc1f181b73a20ede7b0997557bfcdc Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 27 Nov 2025 14:35:54 +0100 Subject: [PATCH 1/2] fix(oracle): Add a warning for Oracle 11 Signed-off-by: Joas Schilling --- .../lib/SetupChecks/SupportedDatabase.php | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/settings/lib/SetupChecks/SupportedDatabase.php b/apps/settings/lib/SetupChecks/SupportedDatabase.php index d083958d16e..4f6235b3510 100644 --- a/apps/settings/lib/SetupChecks/SupportedDatabase.php +++ b/apps/settings/lib/SetupChecks/SupportedDatabase.php @@ -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, @@ -112,7 +114,29 @@ class SupportedDatabase implements ISetupCheck { ); } } 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".'), From baabe272f57f05bf44dd4908034515b06e01641e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 1 Dec 2025 15:26:37 +0100 Subject: [PATCH 2/2] test: Adjust the test for the warning of Oracle Signed-off-by: Joas Schilling --- .../tests/SetupChecks/SupportedDatabaseTest.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php index 6c75df47aa0..53e0d517c63 100644 --- a/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php +++ b/apps/settings/tests/SetupChecks/SupportedDatabaseTest.php @@ -41,11 +41,18 @@ class SupportedDatabaseTest extends TestCase { } 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'); } }