]> git.mxchange.org Git - friendica.git/commitdiff
Check for Antelope and convert to Barracuda
authorMichael <heluecht@pirati.ca>
Wed, 1 Apr 2020 18:11:06 +0000 (18:11 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 1 Apr 2020 18:11:06 +0000 (18:11 +0000)
src/Console/DatabaseStructure.php
src/Database/DBStructure.php
src/Model/Item.php
src/Module/Admin/Summary.php

index 62c8136406c9510d8982d43e4ed594ce81d0ea21..6b1fa8d4d6fecaad35db3b445e00ddec0735820d 100644 (file)
@@ -54,7 +54,7 @@ Commands
        dryrun   Show database update schema queries without running them
        update   Update database schema
        dumpsql  Dump database schema
-       toinnodb Convert all tables from MyISAM to InnoDB
+       toinnodb Convert all tables from MyISAM or InnoDB in the Antelope file format to InnoDB in the Barracuda file format
 
 Options
     -h|--help|-?       Show help information
index 06b6524944aa8742bdf6d3c03630a2ccb7cc16e2..6fe4d614d8caea008cb60b25095d358960e43134 100644 (file)
@@ -49,7 +49,7 @@ class DBStructure
        private static $definition = [];
 
        /**
-        * Converts all tables from MyISAM to InnoDB
+        * Converts all tables from MyISAM/InnoDB Antelope to InnoDB Barracuda
         */
        public static function convertToInnoDB()
        {
@@ -59,13 +59,19 @@ class DBStructure
                        ['engine' => 'MyISAM', 'table_schema' => DBA::databaseName()]
                );
 
+               $tables = array_merge($tables, DBA::selectToArray(
+                       ['information_schema' => 'tables'],
+                       ['table_name'],
+                       ['engine' => 'InnoDB', 'ROW_FORMAT' => ['COMPACT', 'REDUNDANT'], 'table_schema' => DBA::databaseName()]
+               ));
+
                if (!DBA::isResult($tables)) {
-                       echo DI::l10n()->t('There are no tables on MyISAM.') . "\n";
+                       echo DI::l10n()->t('There are no tables on MyISAM or InnoDB with the Antelope file format.') . "\n";
                        return;
                }
 
                foreach ($tables AS $table) {
-                       $sql = "ALTER TABLE " . DBA::quoteIdentifier($table['table_name']) . " engine=InnoDB;";
+                       $sql = "ALTER TABLE " . DBA::quoteIdentifier($table['table_name']) . " ENGINE=InnoDB ROW_FORMAT=DYNAMIC;";
                        echo $sql . "\n";
 
                        $result = DBA::e($sql);
index 7ac1ab300aee870c11078a481071f43b3655aaab..a9a6eede233961fac54580a82fdc266e872acb16 100644 (file)
@@ -1957,7 +1957,7 @@ class Item
                        // There are duplicates. We delete our just created entry.
                        Logger::info('Delete duplicated item', ['id' => $current_post, 'uri' => $item['uri'], 'uid' => $item['uid'], 'guid' => $item['guid']]);
 
-                       // Yes, we could do a rollback here - but we are having many users with MyISAM.
+                       // Yes, we could do a rollback here - but we possibly are still having users with MyISAM.
                        DBA::delete('item', ['id' => $current_post]);
                        DBA::commit();
                        return 0;
index 7e3505e7ad4f83570d1ff453cb44ced36c7fadfb..f676792d82d986751f999654c6738722e84a8edd 100644 (file)
@@ -50,6 +50,11 @@ class Summary extends BaseAdmin
                        $warningtext[] = DI::l10n()->t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />', 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
                }
 
+               // are there InnoDB tables in Antelope in the DB? If so, trigger a warning message
+               if (DBA::count(['information_schema' => 'tables'], ['ENGINE' => 'InnoDB', 'ROW_FORMAT' => ['COMPACT', 'REDUNDANT'], 'table_schema' => DBA::databaseName()])) {
+                       $warningtext[] = DI::l10n()->t('Your DB still runs with InnoDB tables in the Antelope file format. You should change the file format to Barracuda. Friendica is using features that are not provided by the Antelope format. See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php bin/console.php dbstructure toinnodb</tt> of your Friendica installation for an automatic conversion.<br />', 'https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html');
+               }
+
                // Check if github.com/friendica/master/VERSION is higher then
                // the local version of Friendica. Check is opt-in, source may be master or devel branch
                if (DI::config()->get('system', 'check_new_version_url', 'none') != 'none') {