From 8afd3159acd3c88ccd5239ef95ea3eda56df5cc3 Mon Sep 17 00:00:00 2001 From: wangxuepeng Date: Tue, 19 Dec 2023 17:51:23 +0800 Subject: [PATCH] * Refactor upgradeModel::fixConsistency. --- module/upgrade/model.php | 6 ++- module/upgrade/test/model/fixconsistency.php | 43 ++++++++++++++++++++ module/upgrade/test/upgrade.class.php | 2 +- 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 module/upgrade/test/model/fixconsistency.php diff --git a/module/upgrade/model.php b/module/upgrade/model.php index f05d1baf2b..7e59c37e74 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -380,13 +380,14 @@ class upgradeModel extends model } /** + * 为一致性问题执行修复sql。 * Exec fix sql for consistency. * * @param string $version * @access public * @return void */ - public function fixConsistency($version) + public function fixConsistency($version): void { $logFile = $this->getConsistencyLogFile(); if(file_exists($logFile)) unlink($logFile); @@ -394,6 +395,9 @@ class upgradeModel extends model $hasError = false; $fixSqls = $this->checkConsistency($version); if($fixSqls) $fixSqls = "SET @@sql_mode= '';" . $fixSqls; + + /* 记录执行的sql并且记录执行结果。 */ + /* Record the executed sql and the result. */ foreach(explode(';', $fixSqls) as $fixSQL) { file_put_contents($logFile, $fixSQL, FILE_APPEND); diff --git a/module/upgrade/test/model/fixconsistency.php b/module/upgrade/test/model/fixconsistency.php new file mode 100644 index 0000000000..6c5b9085c5 --- /dev/null +++ b/module/upgrade/test/model/fixconsistency.php @@ -0,0 +1,43 @@ +#!/usr/bin/env php +addAdminInviteField(); +cid=1 + +- 判断修复一致性的sql中是否有失败执行,若有,则会记录HasError。@1 +- 判断是否成功获取了修复一致性的sql,若成功,则会设置sql_mode。@1 +- 判断是否成功的记录了修复一致性的sql。@1 + +**/ + +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/upgrade.class.php'; + +$upgrade = new upgradeTest(); + +$consistencyFile = $upgrade->getConsistencyLogFile(); +if(file_exists($consistencyFile)) unlink($consistencyFile); + +$versionList = array("18.5"); + +$upgrade->fixConsistency($versionList[0]); + +$file = new SplFileObject($consistencyFile, 'r'); +$file->seek(PHP_INT_MAX); +$totalLines = $file->key(); + +$file->seek($totalLines - 1); +$error = trim($file->current()) === 'HasError'; +r($error) && p('') && e(1); //判断修复一致性的sql中是否有失败执行,若有,则会记录HasError。 + +$file->rewind(); +$firstLine = $file->current(); +r(strpos($firstLine, 'sql_mode') !== false) && p('') && e(1); //判断是否成功获取了修复一致性的sql,若成功,则会设置sql_mode。 + +$secondLinePoint = $file->seek(1); +$secondLine = $file->current(); +$condition = trim($secondLine) === 'ALTER TABLE `zt_account` CHANGE `extra` `extra` text DEFAULT NULL'; +r($condition) && p('') && e(1); //判断是否成功的记录了修复一致性的sql。 diff --git a/module/upgrade/test/upgrade.class.php b/module/upgrade/test/upgrade.class.php index efe42f0614..275667c3ba 100644 --- a/module/upgrade/test/upgrade.class.php +++ b/module/upgrade/test/upgrade.class.php @@ -42,7 +42,7 @@ class upgradeTest */ public function __call(string $method, array $args): mixed { - return $this->objectModel->$method($args); + return call_user_func_array(array($this->objectModel, $method), $args); } /**