From 811c1d2ad6f072e660f3e11dcbfd437f3d719a25 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 15 Aug 2022 13:04:05 +0800 Subject: [PATCH] * adjust for change table engine. --- module/admin/control.php | 52 ++++++++++++++------------ module/admin/lang/de.php | 1 + module/admin/lang/en.php | 1 + module/admin/lang/fr.php | 1 + module/admin/lang/zh-cn.php | 1 + module/admin/view/tableengine.html.php | 47 ++++++++++++++--------- 6 files changed, 62 insertions(+), 41 deletions(-) diff --git a/module/admin/control.php b/module/admin/control.php index 7061b75c1c..40febca28c 100644 --- a/module/admin/control.php +++ b/module/admin/control.php @@ -393,22 +393,36 @@ class admin extends control * @access public * @return void */ - public function ajaxChangeTableEngine($tableName) + public function ajaxChangeTableEngine() { $response = array(); - $response['result'] = 'success'; - $response['message'] = ''; + $response['result'] = 'success'; + $response['message'] = ''; + $response['thisTable'] = ''; + $response['nextTable'] = ''; $tableEngines = $this->loadModel('misc')->getTableEngines(); - if(!isset($tableEngines[$tableName])) + + $thisTable = ''; + $nextTable = ''; + foreach($tableEngines as $table => $engine) { - $response['result'] = 'fail'; - return print(json_encode($response)); + if($engine == 'InnoDB') continue; + + if(stripos($table, 'searchindex') !== false) + { + $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); + if($mysqlVersion < 5.6) continue; + } + + if($thisTable and empty($nextTable)) $nextTable = $table; + if(empty($thisTable)) $thisTable = $table; + if($thisTable and $nextTable) break; } - if($tableEngines[$tableName] == 'InnoDB') + if(empty($thisTable)) { - $response['message'] = sprintf($this->lang->admin->changeSuccess, $tableName); + $response['result'] = 'finished'; return print(json_encode($response)); } @@ -419,36 +433,28 @@ class admin extends control foreach($dbProcesses as $dbProcess) { if($dbProcess->db != $this->config->db->name) continue; - if(strpos($dbProcess->Info, " {$tableName} ") !== false) + if(strpos($dbProcess->Info, " {$thisTable} ") !== false) { - $response['message'] = sprintf($this->lang->upgrade->changingTable, $tableName); + $response['message'] = sprintf($this->lang->upgrade->changingTable, $thisTable); return print(json_encode($response)); } } } catch(PDOException $e){} - if(stripos($tableName, 'searchindex') !== false) - { - $mysqlVersion = $this->loadModel('install')->getMysqlVersion(); - if($mysqlVersion < 5.6) - { - $response['result'] = 'fail'; - $response['message'] = $this->lang->admin->errorInnodb; - return print(json_encode($response)); - } - } + $response['thisTable'] = $thisTable; + $response['nextTable'] = $nextTable; try { - $sql = "ALTER TABLE `$tableName` ENGINE='InnoDB'"; + $sql = "ALTER TABLE `$thisTable` ENGINE='InnoDB'"; $this->dao->exec($sql); - $response['message'] = sprintf($this->lang->admin->changeSuccess, $tableName); + $response['message'] = sprintf($this->lang->admin->changeSuccess, $thisTable); } catch(PDOException $e) { $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->admin->changeFail, $tableName, htmlspecialchars($e->getMessage())); + $response['message'] = sprintf($this->lang->admin->changeFail, $thisTable, htmlspecialchars($e->getMessage())); } return print(json_encode($response)); diff --git a/module/admin/lang/de.php b/module/admin/lang/de.php index b498651993..4911a17729 100644 --- a/module/admin/lang/de.php +++ b/module/admin/lang/de.php @@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...'; $lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.'; $lang->admin->changeFail = "Failed to replace table %s engine. Reason: %s。"; $lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.'; +$lang->admin->changeFinished = "Database engine replacement completed."; $lang->admin->engineInfo = "The %s table engine is %s."; $lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines"; $lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines"; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index c850026926..1c8d55ebc2 100644 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...'; $lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.'; $lang->admin->changeFail = "Failed to replace table %s engine. Reason: %s。"; $lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.'; +$lang->admin->changeFinished = "Database engine replacement completed."; $lang->admin->engineInfo = "The %s table engine is %s."; $lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines"; $lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines"; diff --git a/module/admin/lang/fr.php b/module/admin/lang/fr.php index a7749f2a4b..4bb1433680 100644 --- a/module/admin/lang/fr.php +++ b/module/admin/lang/fr.php @@ -35,6 +35,7 @@ $lang->admin->changingTable = 'Replacing data table %s engine...'; $lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.'; $lang->admin->changeFail = "Failed to replace table %s engine. Reason: %s。"; $lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.'; +$lang->admin->changeFinished = "Database engine replacement completed."; $lang->admin->engineInfo = "The %s table engine is %s."; $lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines"; $lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines"; diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index 10d8a111a6..51b9e2c510 100644 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -35,6 +35,7 @@ $lang->admin->changingTable = '正在更换数据表%s引擎...'; $lang->admin->changeSuccess = '已经更换数据表%s引擎为InnoDB。'; $lang->admin->changeFail = "更换数据表%s引擎失败,原因:%s。"; $lang->admin->errorInnodb = '您当前的数据库不支持使用InnoDB数据表引擎。'; +$lang->admin->changeFinished = "更换数据库引擎完毕。"; $lang->admin->engineInfo = "表%s的引擎是%s。"; $lang->admin->engineSummary['hasMyISAM'] = "有%s个表不是InnoDB引擎"; $lang->admin->engineSummary['allInnoDB'] = "所有的表都是InnoDB引擎了"; diff --git a/module/admin/view/tableengine.html.php b/module/admin/view/tableengine.html.php index 32d83293de..84db4ddfba 100644 --- a/module/admin/view/tableengine.html.php +++ b/module/admin/view/tableengine.html.php @@ -36,6 +36,7 @@ admin->changingTable);?> +admin->engineSummary['hasMyISAM']);?>