From 740a9315c32d7240a7e64f695546a963d386b7df 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 6989dc765f6a9..05c6c433ae04d 100644 --- a/lib/dml/mysqli_native_moodle_database.php +++ b/lib/dml/mysqli_native_moodle_database.php @@ -307,6 +307,18 @@ public function get_row_format($table = null) { 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 @@ public function is_file_per_table_enabled() { * @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;