From feb69eb8a568952fd73a55997555036494d844da Mon Sep 17 00:00:00 2001 From: Matteo Scaramuccia Date: Mon, 4 Sep 2017 23:12:47 +0200 Subject: [PATCH] MDL-59099 dml: MySQL8 supports only the Barracuda file format. The following InnoDB file format configuration parameters were deprecated in MySQL 5.7.7 and are now removed: - innodb_file_format - innodb_file_format_check - innodb_file_format_max - innodb_large_prefix File format configuration parameters were necessary for creating tables compatible with earlier versions of InnoDB in MySQL 5.1. Now that MySQL 5.1 has reached the end of its product lifecycle, the parameters are no longer required. The FILE_FORMAT column was removed from the INNODB_SYS_TABLES and INNODB_SYS_TABLESPACES Information Schema tables. Ref: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html --- lib/dml/mysqli_native_moodle_database.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/dml/mysqli_native_moodle_database.php b/lib/dml/mysqli_native_moodle_database.php index 0c48369afc4..33b3b7d02d5 100644 --- a/lib/dml/mysqli_native_moodle_database.php +++ b/lib/dml/mysqli_native_moodle_database.php @@ -307,6 +307,18 @@ class mysqli_native_moodle_database extends moodle_database { FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = DATABASE() AND table_name = '{$this->prefix}$table'"; } else { + if (($this->get_dbtype() == 'mysqli') && + // Breaking change in MySQL 8.0.0+: antelope file format support has been removed. + version_compare($this->get_server_info()['version'], '8.0.0', '>=')) { + $dbengine = $this->get_dbengine(); + $supporteddbengines = array('InnoDB', 'XtraDB'); + if (in_array($dbengine, $supporteddbengines)) { + $rowformat = 'Barracuda'; + } + + return $rowformat; + } + $sql = "SHOW VARIABLES LIKE 'innodb_file_format'"; } $this->query_start($sql, NULL, SQL_QUERY_AUX); @@ -384,6 +396,12 @@ class mysqli_native_moodle_database extends moodle_database { * @return bool True if on otherwise false. */ public function is_large_prefix_enabled() { + if (($this->get_dbtype() == 'mysqli') && + // Breaking change since 8.0.0: there is only one file format and 'innodb_large_prefix' has been removed. + version_compare($this->get_server_info()['version'], '8.0.0', '>=')) { + return true; + } + if ($largeprefix = $this->get_record_sql("SHOW VARIABLES LIKE 'innodb_large_prefix'")) { if ($largeprefix->value == 'ON') { return true;