diff --git a/CHANGELOG.md b/CHANGELOG.md index 8da2ffd88af99dcc777bfc5e9a2fb219542b9364..0b45cfe7500e66c5b8b97bc321b7523542080b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,8 @@ ### Fixed +- #4277 Adaptation de `spip_mysql_repair()` à innodb +- #4277 Permettre de spécifier l'engine mysql à utiliser - #5095 Ne pas casser une meta sérialisée quand un utilisateur saisit un emoji dans un formulaire de configuration - #5152 Éviter des warning si `spip_log()` est appelé avant l’initialisation (dans mes_options) - #5162 Erreur d’exécution sur `vider_date()` qui doit renvoyer une chaine diff --git a/ecrire/base/repair.php b/ecrire/base/repair.php index 5962c4b35140a9740654b8c895ddd8d2da7476c0..bd416bb41a549001274d85baac4bfe65a2b7f45e 100644 --- a/ecrire/base/repair.php +++ b/ecrire/base/repair.php @@ -63,7 +63,7 @@ function base_repair_dist($titre = '', $reprise = '') { **/ function admin_repair_tables() { - $repair = sql_repair('repair', null, 'continue'); + $repair = sql_serveur('repair', '', true); // recreer les tables manquantes eventuelles include_spip('base/create'); diff --git a/ecrire/req/mysql.php b/ecrire/req/mysql.php index 335c4dc789f7bbb27ba456d324a74b78124a3aa3..07f2b34fa7830245c232ebec38251dfa28788d1f 100644 --- a/ecrire/req/mysql.php +++ b/ecrire/req/mysql.php @@ -27,6 +27,10 @@ if (!defined('_MYSQL_NOPLANES')) { define('_MYSQL_NOPLANES', true); } +if (!defined('_MYSQL_ENGINE')) { + define('_MYSQL_ENGINE', 'MyISAM'); +} + /** * Crée la première connexion à un serveur MySQL via MySQLi * @@ -728,7 +732,7 @@ function spip_mysql_create( } $temporary = $temporary ? 'TEMPORARY' : ''; $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')' - . ' ENGINE=MyISAM' + . ' ENGINE=' . _MYSQL_ENGINE . ($character_set ? " DEFAULT $character_set" : '') . "\n"; @@ -881,7 +885,17 @@ function spip_mysql_showbase($match, $serveur = '', $requeter = true) { * - true si la requête a réussie, false sinon */ function spip_mysql_repair($table, $serveur = '', $requeter = true) { - return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter); + $table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true)); + $engine = $table_status['Engine']; + if ($engine == 'InnoDB') { + if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) { + return [' OK ']; + } + } elseif ($engine == 'MyISAM') { + return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter); + } else { + spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG); + } } /**