This commit is contained in:
tanghucheng
2023-07-07 16:46:36 +08:00
parent 11166503eb
commit 04ca72884e
2 changed files with 81 additions and 22 deletions
+19 -20
View File
@@ -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
View File
@@ -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.
*