From b35b89591595a55d3b4813844f6dbf1ab9396d57 Mon Sep 17 00:00:00 2001 From: b_b <bruno@eliaz.fr> Date: Fri, 6 May 2022 14:45:13 +0200 Subject: [PATCH] =?UTF-8?q?fix=20#4277=20Permettre=20de=20sp=C3=A9cifier?= =?UTF-8?q?=20l'engine=20mysql=20=C3=A0=20utiliser=20+=20adaptation=20de?= =?UTF-8?q?=20spip=5Fmysql=5Frepair()=20=C3=A0=20innodb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ ecrire/base/repair.php | 2 +- ecrire/req/mysql.php | 18 ++++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8da2ffd88a..0b45cfe750 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 5962c4b351..bd416bb41a 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 335c4dc789..07f2b34fa7 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); + } } /** -- GitLab