Browse Source

版本执行差异sql

tags/6.2.0
tianya 1 year ago
parent
commit
da5f42b378
3 changed files with 83 additions and 18 deletions
  1. +16
    -0
      src/admin/api.php
  2. +3
    -8
      src/install/index.php
  3. +64
    -10
      src/system/common.func.php

+ 16
- 0
src/admin/api.php View File

@@ -90,6 +90,20 @@ if ($action === 'is_need_check_code') {
if (!TableHasField("#@__admin", "loginerr")) {
$unQueryVer[] = "6.2.0";
}
if (count($unQueryVer) > 0) {
$upsqls = GetUpdateSQL();
foreach ($unQueryVer as $vv) {
$ss = $upsqls[$vv];
foreach ($ss as $s) {
if (trim($s) != '') {
$dsql->safeCheck = false;
$dsql->ExecuteNoneQuery(trim($s));
$dsql->safeCheck = true;
}
}
}
}

require_once(DEDEINC.'/libraries/dedehttpdown.class.php');
checkLogin();
@@ -265,7 +279,9 @@ if ($action === 'is_need_check_code') {
$sqls = explode(";\r\n", $sql);
foreach ($sqls as $sql) {
if (trim($sql) != '') {
$dsql->safeCheck = false;
$dsql->ExecuteNoneQuery(trim($sql));
$dsql->safeCheck = true;
}
}
}


+ 3
- 8
src/install/index.php View File

@@ -194,16 +194,11 @@ else if ($step==2)
}
$db->exec($query);
} else {
if ($mysqlVersion < 4.1)
if (preg_match('#CREATE#i', $query))
{
$rs = mysql_query($query,$conn);
$rs = mysql_query(preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query),$conn);
} else {
if (preg_match('#CREATE#i', $query))
{
$rs = mysql_query(preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query),$conn);
} else {
$rs = mysql_query($query,$conn);
}
$rs = mysql_query($query,$conn);
}
}
$query='';


+ 64
- 10
src/system/common.func.php View File

@@ -571,23 +571,77 @@ function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $to
}
echo $dede_addonfields;
}

/**
* 用于检测系统版本
* 获取对应版本号的更新SQL
*
* @return string
* @return array
*/
function CheckDedeVer()
function GetUpdateSQL()
{
global $dsql;
$ver = '1.0.0';
$dsql->GetTableFields('#@__tagindex');
while ($fields = $dsql->GetFieldObject()) {
if ($fields->name === 'tag_pinyin') {
$ver = '6.0.2';
global $cfg_dbprefix,$cfg_dbtype,$cfg_db_language;
$result = array();
$query = '';
$sql4tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language;
$fp = fopen(DEDEROOT.'/install/update.txt','r');
$sqls = array();
$current_ver = "";
while(!feof($fp))
{
$line = rtrim(fgets($fp,1024));
if (preg_match("/\-\- ([\d\.]+)/",$line,$matches)) {
if (count($sqls) > 0) {
$result[$current_ver] = $sqls;
}
$sqls = array();
$current_ver = $matches[1];
}
if (preg_match("#;$#", $line))
{
$query .= $line."\n";
$query = str_replace('#@__',$cfg_dbprefix,$query);
if ( $cfg_dbtype == 'sqlite' )
{
$query = preg_replace('/character set (.*?) /i','',$query);
$query = preg_replace('/unsigned/i','',$query);
$query = str_replace('TYPE=MyISAM','',$query);
$query = preg_replace ('/TINYINT\(([\d]+)\)/i','INTEGER',$query);
$query = preg_replace ('/mediumint\(([\d]+)\)/i','INTEGER',$query);
$query = preg_replace ('/smallint\(([\d]+)\)/i','INTEGER',$query);
$query = preg_replace('/int\(([\d]+)\)/i','INTEGER',$query);
$query = preg_replace('/auto_increment/i','PRIMARY KEY AUTOINCREMENT',$query);
$query = preg_replace('/,([\t\s ]+)KEY(.*?)MyISAM;/','',$query);
$query = preg_replace('/,([\t\s ]+)KEY(.*?);/',');',$query);
$query = preg_replace('/,([\t\s ]+)UNIQUE KEY(.*?);/',');',$query);
$query = preg_replace('/set\(([^\)]*?)\)/','varchar',$query);
$query = preg_replace('/enum\(([^\)]*?)\)/','varchar',$query);
if ( preg_match("/PRIMARY KEY AUTOINCREMENT/",$query) )
{
$query = preg_replace('/,([\t\s ]+)PRIMARY KEY([\t\s ]+)\(`([0-9a-zA-Z]+)`\)/i','',$query);
}
$sqls[] = $query;
// $db->exec($query);
} else {
if (preg_match('#CREATE#i', $query))
{
$sqls[] = preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query);
} else {
$sqls[] = $query;
}
}
$query='';
} else if (!preg_match("#^(\/\/|--)#", $line))
{
$query .= $line;
}
}
if (count($sqls) > 0) {
$result[$current_ver] = $sqls;
}
return $ver;
fclose($fp);
return $result;
}

//自定义函数接口
if (file_exists(DEDEINC.'/extend.func.php')) {
require_once(DEDEINC.'/extend.func.php');


Loading…
Cancel
Save