From 9b8104ce9bd655c544d0cfe0330e8f86ae0a4e04 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Fri, 10 Apr 2015 10:30:09 +0800 Subject: [PATCH] MDL-46963 environment: add check for antelope row format --- admin/environment.xml | 5 +++++ lang/en/admin.php | 1 + lib/upgradelib.php | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/admin/environment.xml b/admin/environment.xml index ede697b6721..e596403a79d 100644 --- a/admin/environment.xml +++ b/admin/environment.xml @@ -1390,6 +1390,11 @@ + + + + + diff --git a/lang/en/admin.php b/lang/en/admin.php index dd15350c02a..0a2f2e919ef 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -1070,6 +1070,7 @@ $string['unlockaccount'] = 'Unlock account'; $string['unsettheme'] = 'Unset theme'; $string['unsupported'] = 'Unsupported'; $string['unsupporteddbstorageengine'] = 'The database storage engine being used is no longer supported.'; +$string['unsupporteddbtablerowformat'] = 'Your database has tables using Antelope as the file format. You are recommended to convert the tables to the Barracuda file format. See the documentation Administration via command line for details of a tool for converting InnoDB tables to Barracuda.'; $string['unsuspenduser'] = 'Activate user account'; $string['updateaccounts'] = 'Update existing accounts'; $string['updatecomponent'] = 'Update component'; diff --git a/lib/upgradelib.php b/lib/upgradelib.php index 9cd41a018a4..272851a3e0f 100644 --- a/lib/upgradelib.php +++ b/lib/upgradelib.php @@ -2245,3 +2245,35 @@ function check_slasharguments(environment_results $result){ return null; } + +/** + * This function verifies if the database has tables using innoDB Antelope row format. + * + * @param environment_results $result + * @return environment_results|null updated results object, or null if no Antelope table has been found. + */ +function check_database_tables_row_format(environment_results $result) { + global $DB; + + if ($DB->get_dbfamily() == 'mysql') { + $generator = $DB->get_manager()->generator; + + foreach ($DB->get_tables(false) as $table) { + $columns = $DB->get_columns($table, false); + $size = $generator->guess_antolope_row_size($columns); + $format = $DB->get_row_format($table); + + if ($size <= $generator::ANTELOPE_MAX_ROW_SIZE) { + continue; + } + + if ($format === 'Compact' or $format === 'Redundant') { + $result->setInfo('unsupported_db_table_row_format'); + $result->setStatus(false); + return $result; + } + } + } + + return null; +}