* Fix bug #36363.
This commit is contained in:
+19
-20
@@ -1,27 +1,26 @@
|
||||
INSERT INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('traincourse', 'cloudImport', '125', ',biz,max,ipd,', ',rnd,', '1', '10');
|
||||
INSERT INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('dataview', 'export', '650', ',biz,max,ipd,', ',rnd,', '1', '30');
|
||||
REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('traincourse', 'cloudImport', '125', ',biz,max,ipd,', ',rnd,', '1', '10');
|
||||
REPLACE INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('dataview', 'export', '650', ',biz,max,ipd,', ',rnd,', '1', '30');
|
||||
|
||||
INSERT INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES
|
||||
(2107, 'priv', 'de', 'traincourse-cloudImport', '', ''),
|
||||
(2107, 'priv', 'en', 'traincourse-cloudImport', '', ''),
|
||||
(2107, 'priv', 'fr', 'traincourse-cloudImport', '', ''),
|
||||
(2107, 'priv', 'zh-cn', 'traincourse-cloudImport', '', ''),
|
||||
(2107, 'priv', 'zh-tw', 'traincourse-cloudImport', '', ''),
|
||||
(2108, 'priv', 'de', 'dataview-export', '', ''),
|
||||
(2108, 'priv', 'en', 'dataview-export', '', ''),
|
||||
(2108, 'priv', 'fr', 'dataview-export', '', ''),
|
||||
(2108, 'priv', 'zh-cn', 'dataview-export', '', ''),
|
||||
(2108, 'priv', 'zh-tw', 'dataview-export', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2107, 'priv', 'de', 'traincourse-cloudImport', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2107, 'priv', 'en', 'traincourse-cloudImport', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2107, 'priv', 'fr', 'traincourse-cloudImport', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2107, 'priv', 'zh-cn', 'traincourse-cloudImport', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2107, 'priv', 'zh-tw', 'traincourse-cloudImport', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2108, 'priv', 'de', 'dataview-export', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2108, 'priv', 'en', 'dataview-export', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2108, 'priv', 'fr', 'dataview-export', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2108, 'priv', 'zh-cn', 'dataview-export', '', '');
|
||||
REPLACE INTO `zt_privlang` (`objectID`, `objectType`, `lang`, `key`, `value`, `desc`) VALUES (2108, 'priv', 'zh-tw', 'dataview-export', '', '');
|
||||
|
||||
INSERT INTO zt_privmanager (id, parent, code, `type`, edition, vision, `order`) VALUES (650, 445, '', 'package', ',biz,max,ipd,', ',rnd,', 20);
|
||||
INSERT INTO zt_privlang (objectID, objectType, lang, `key`, value, `desc`) VALUES(650, 'manager', 'zh-cn', '', '导出数据表', '');
|
||||
REPLACE INTO zt_privmanager (id, parent, code, `type`, edition, vision, `order`) VALUES (650, 445, '', 'package', ',biz,max,ipd,', ',rnd,', 20);
|
||||
REPLACE INTO zt_privlang (objectID, objectType, lang, `key`, value, `desc`) VALUES(650, 'manager', 'zh-cn', '', '导出数据表', '');
|
||||
|
||||
INSERT INTO zt_privrelation (priv, `type`, relationPriv) VALUES(2108, 'depend', 1648);
|
||||
INSERT INTO zt_privrelation (priv, `type`, relationPriv) VALUES(2108, 'depend', 1651);
|
||||
REPLACE INTO zt_privrelation (priv, `type`, relationPriv) VALUES(2108, 'depend', 1648);
|
||||
REPLACE INTO zt_privrelation (priv, `type`, relationPriv) VALUES(2108, 'depend', 1651);
|
||||
|
||||
ALTER TABLE `zt_traincourse` ADD `importedStatus` enum('','wait','doing','done') NOT NULL DEFAULT '' AFTER `desc`;
|
||||
ALTER TABLE `zt_traincourse` ADD `lastUpdatedTime` int UNSIGNED NOT NULL DEFAULT 0 AFTER `importedStatus`;
|
||||
ALTER TABLE `zt_traincourse` MODIFY COLUMN `code` varchar(255) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `zt_traincourse` ADD `importedStatus` enum('','wait','doing','done') NOT NULL DEFAULT '';
|
||||
ALTER TABLE `zt_traincourse` ADD `lastUpdatedTime` int UNSIGNED NOT NULL DEFAULT 0;
|
||||
ALTER TABLE `zt_traincourse` MODIFY `code` varchar(255) NOT NULL DEFAULT '';
|
||||
|
||||
UPDATE `zt_im_chat` SET `createdDate` = NULL WHERE `createdDate` = '0000-00-00 00:00:00';
|
||||
UPDATE `zt_im_chat` SET `editedDate` = NULL WHERE `editedDate` = '0000-00-00 00:00:00';
|
||||
|
||||
+62
-2
@@ -268,8 +268,7 @@ class dbh
|
||||
case 'SELECT':
|
||||
return $this->formatField($sql);
|
||||
case 'REPLACE':
|
||||
$sql = str_replace('REPLACE', 'INSERT', $sql);
|
||||
$action = 'INSERT';
|
||||
return $this->processReplace($sql);
|
||||
case 'INSERT':
|
||||
case 'UPDATE':
|
||||
$setPos = stripos($sql, ' VALUES');
|
||||
@@ -472,6 +471,67 @@ class dbh
|
||||
return $sql;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process replace into sql.
|
||||
*
|
||||
* @param mixed $sql
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function processReplace($sql)
|
||||
{
|
||||
// 解析REPLACE INTO语句,提取出表名、字段和值
|
||||
$matches = [];
|
||||
preg_match('/^REPLACE\s+INTO\s+`?([\w_]+)`?\s*\((.*)\)\s+VALUES\s*\((.*?)\)\s*$/i', $sql, $matches);
|
||||
$table_name = $matches[1];
|
||||
$columns = array_map('trim', explode(',', $matches[2]));
|
||||
$values = array_map('trim', explode(', ', $matches[3]));
|
||||
if($table_name == '' or $columns == '' or $values == '') return $sql;
|
||||
|
||||
// 构造SELECT语句,查询数据是否存在
|
||||
$where = [];
|
||||
foreach ($columns as $index => $column) {
|
||||
$value = trim($values[$index], "'");
|
||||
$column = trim($column, '`');
|
||||
$values[$index] = $value;
|
||||
$columns[$index] = $column;
|
||||
$where[] = "`$column` = '$value'";
|
||||
}
|
||||
|
||||
$select_sql = "SELECT * FROM `$table_name` WHERE " . implode(' AND ', $where);
|
||||
|
||||
$result = $this->query($select_sql);
|
||||
$result = $result->fetchAll();
|
||||
$sql = in_array('id', $columns) ? "SET IDENTITY_INSERT `$table_name` ON;" : '';
|
||||
|
||||
if($result)
|
||||
{
|
||||
// 数据已存在,构造UPDATE语句并执行
|
||||
$set = [];
|
||||
$where = [];
|
||||
foreach ($columns as $index => $column) {
|
||||
$value = $values[$index];
|
||||
$set[] = "`$column` = '$value'";
|
||||
$where[] = "`$column` = '$value'";
|
||||
}
|
||||
|
||||
$sql .= "UPDATE `$table_name` SET " . implode(', ', $set) . " WHERE " . implode(' AND ', $where);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 数据不存在,构造INSERT INTO语句并执行
|
||||
$selectColumn = array();
|
||||
$selectValue = array();
|
||||
foreach ($columns as $index => $column) {
|
||||
$selectColumn[] .= "`$column`";
|
||||
$selectValue[] .= "'{$values[$index]}'";
|
||||
}
|
||||
$sql .= "INSERT INTO `$table_name` (" . implode(', ', $selectColumn) . ") VALUES (" . implode(', ', $selectValue) . ")";
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert alter table sql.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user