diff --git a/core/lib/Drupal/Core/Database/Install/Tasks.php b/core/lib/Drupal/Core/Database/Install/Tasks.php index 1cc1d131a50ae8b168398871c03477a979354013..5d36603ae88062c8e3848dae2674418bcce7c0a5 100644 --- a/core/lib/Drupal/Core/Database/Install/Tasks.php +++ b/core/lib/Drupal/Core/Database/Install/Tasks.php @@ -188,7 +188,22 @@ protected function runTestQuery($query, $pass, $fail, $fatal = FALSE) { */ protected function checkEngineVersion() { // Ensure that the database server has the right version. - if ($this->minimumVersion() && version_compare(Database::getConnection()->version(), $this->minimumVersion(), '<')) { + // We append '-AnyName' to the minimum version for comparison purposes, so + // that engines that append a package name or other build information to + // their version strings still pass. For example, MariaDB might report its + // version as '10.2.7-MariaDB' or '10.2.7+maria' or similar. + // version_compare() treats '-' and '+' as equivalent, and non-numeric + // parts other than conventional stability specifiers (dev, alpha, beta, + // etc.) as equal to each other and less than numeric parts and stability + // specifiers. In other words, 10.2.7-MariaDB, 10.2.7+maria, and + // 10.2.7-AnyName are all equal to each other and less than 10.2.7-alpha. + // This means that by appending '-AnyName' for the comparison check, that + // alpha and other pre-release versions of the minimum will pass this + // check, which isn't ideal; however, people running pre-release versions + // of database servers should know what they're doing, whether Drupal warns + // them or not. + // @see https://www.php.net/manual/en/function.version-compare.php + if ($this->minimumVersion() && version_compare(Database::getConnection()->version(), $this->minimumVersion() . '-AnyName', '<')) { $this->fail(t("The database server version %version is less than the minimum required version %minimum_version.", ['%version' => Database::getConnection()->version(), '%minimum_version' => $this->minimumVersion()])); } }