* Refactor upgradeModel::fixConsistency.

This commit is contained in:
wangxuepeng
2023-12-19 17:51:28 +08:00
parent cfafdc00f1
commit 8afd3159ac
3 changed files with 49 additions and 2 deletions
+5 -1
View File
@@ -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);
@@ -0,0 +1,43 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
/**
title=测试 upgradeModel->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。
+1 -1
View File
@@ -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);
}
/**