From d5a8ae0cc2541c6d73b2752079dcef6c987743fc Mon Sep 17 00:00:00 2001
From: tianya
Date: Thu, 27 Mar 2025 23:56:09 +0800
Subject: [PATCH] =?UTF-8?q?sqlite=E6=94=AF=E6=8C=81=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/install/index.php | 17 +-
src/install/install.html | 2 +
src/install/update.txt | 227 -----------------------
src/system/common.func.php | 126 ++++++++++++-
src/system/database/dedesqlite.class.php | 68 ++-----
5 files changed, 138 insertions(+), 302 deletions(-)
delete mode 100644 src/install/update.txt
diff --git a/src/install/index.php b/src/install/index.php
index eb7a56bf..83877650 100644
--- a/src/install/index.php
+++ b/src/install/index.php
@@ -170,22 +170,7 @@ else if ($step==2) {
$query .= $line."\n";
$query = str_replace('#@__', $dbprefix, $query);
if ($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);
- }
+ $query = ConvertMysqlToSqlite($query);
$db->exec($query);
} else {
if (preg_match('#CREATE#i', $query)) {
diff --git a/src/install/install.html b/src/install/install.html
index 915c55ab..1ace7287 100644
--- a/src/install/install.html
+++ b/src/install/install.html
@@ -113,8 +113,10 @@
$("#dbtype").change(function() {
if ($(this).val() === 'sqlite') {
$(".form-group.server").hide();
+ $("#dbpwd").prop("required", false);
} else {
$(".form-group.server").show();
+ $("#dbpwd").prop("required", true);
}
});
diff --git a/src/install/update.txt b/src/install/update.txt
deleted file mode 100644
index 1abd1cf3..00000000
--- a/src/install/update.txt
+++ /dev/null
@@ -1,227 +0,0 @@
--- 6.0.2
-ALTER TABLE `#@__tagindex` ADD COLUMN `keywords` VARCHAR(255) NULL DEFAULT NULL AFTER `tag`;
-ALTER TABLE `#@__tagindex` ADD COLUMN `description` VARCHAR(255) NULL DEFAULT NULL AFTER `keywords`;
-ALTER TABLE `#@__tagindex` ADD COLUMN `title` VARCHAR(255) NULL DEFAULT NULL AFTER `description`;
-ALTER TABLE `#@__tagindex` ADD COLUMN `tag_pinyin` VARCHAR(255) NULL DEFAULT NULL AFTER `title`;
-
--- 6.0.3
-ALTER TABLE `#@__tagindex`
- ADD COLUMN `uptime` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `addtime`,
- ADD COLUMN `mktime` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `uptime`;
-ALTER TABLE `#@__feedback` ADD COLUMN `fid` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `aid`;
-ALTER TABLE `#@__feedback` ADD COLUMN `replycount` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `dtime`;
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_feedback_msglen', '评论内容字数限定', 5, 'number', '200');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_auth_code', '商业版授权码', 1, 'string', '');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_bizcore_hostname', 'DedeBIZ Core地址', 1, 'string', '127.0.0.1');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_bizcore_port', 'DedeBIZ Core端口', 1, 'number', '8181');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_bizcore_appid', 'DedeBIZ Core应用ID', 1, 'string', '');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_bizcore_key', 'DedeBIZ Core通信密钥', 1, 'string', '');
-CREATE TABLE `#@__feedback_goodbad` (
- `fgid` INT(11) NOT NULL AUTO_INCREMENT,
- `mid` INT(11) NOT NULL DEFAULT '0',
- `fid` INT(11) NOT NULL DEFAULT '0',
- `fgtype` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '0:good 1:bad',
- PRIMARY KEY (`fgid`)
-) TYPE=MyISAM;
-CREATE TABLE `#@__search_limits` (
- `ip` VARCHAR(200) NOT NULL,
- `searchtime` INT(11) NULL DEFAULT NULL,
- PRIMARY KEY (`ip`)
-) TYPE=MyISAM;
-
--- 6.1.0
-ALTER TABLE `#@__arctype` ADD COLUMN `namegk` varchar(255) NULL AFTER `typename`,
- ADD COLUMN `enname` varchar(255) NULL AFTER `namegk`,
- ADD COLUMN `ennamegk` varchar(255) NULL AFTER `enname`,
- ADD COLUMN `litpic` varchar(255) NULL AFTER `ennamegk`,
- ADD COLUMN `litimg` varchar(255) NULL AFTER `litpic`;
-
--- 6.1.7
-CREATE TABLE `#@__statistics` (`id` int NOT NULL AUTO_INCREMENT,
- `sdate` int DEFAULT NULL COMMENT '记录日期',
- `pv` int DEFAULT NULL COMMENT 'PV',
- `uv` int DEFAULT NULL COMMENT 'UV',
- `ip` int DEFAULT NULL COMMENT 'IP',
- `vv` int DEFAULT NULL COMMENT 'vv',
- PRIMARY KEY (`id`)
-) TYPE=MyISAM;
-CREATE TABLE `#@__statistics_detail` (`id` int NOT NULL AUTO_INCREMENT,
- `t` int DEFAULT NULL COMMENT 'unixtime',
- `created_date` int DEFAULT NULL COMMENT '日期,20220326',
- `created_hour` int DEFAULT NULL COMMENT '时间,12',
- `dduuid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'uuid',
- `ssid` varchar(32) DEFAULT NULL COMMENT 'session_id',
- `ip` varchar(46) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址ip',
- `browser` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '浏览器',
- `device` varchar(50) DEFAULT NULL COMMENT '设备',
- `device_type` varchar(10) DEFAULT NULL COMMENT '设备类型',
- `os` varchar(20) DEFAULT NULL COMMENT '操作系统',
- `url_type` tinyint DEFAULT NULL COMMENT '浏览地址类型:0:未知 1:列表 2:文档 3:搜索 4:标签',
- `typeid` int DEFAULT NULL COMMENT '栏目id',
- `aid` int DEFAULT NULL COMMENT '文档id',
- `value` varchar(50) DEFAULT NULL COMMENT '值',
- PRIMARY KEY (`id`),
- KEY `idx_created_date_dduuid` (`created_date`,`dduuid`),
- KEY `idx_created_date_ip` (`created_date`,`ip`),
- KEY `idx_created_date_ssid` (`created_date`,`ssid`)
-) TYPE=MyISAM;
-ALTER TABLE `#@__addonarticle` MODIFY COLUMN `userip` char(46) NOT NULL DEFAULT '' AFTER `templet`;
-ALTER TABLE `#@__addonimages` MODIFY COLUMN `userip` char(46) NOT NULL DEFAULT '' AFTER `templet`;
-ALTER TABLE `#@__addoninfos` MODIFY COLUMN `userip` varchar(46) NOT NULL DEFAULT '' AFTER `litpic`;
-ALTER TABLE `#@__addonshop` MODIFY COLUMN `userip` char(46) NOT NULL DEFAULT '' AFTER `templet`;
-ALTER TABLE `#@__addonsoft` MODIFY COLUMN `userip` char(46) NOT NULL DEFAULT '' AFTER `templet`;
-ALTER TABLE `#@__addonspec` MODIFY COLUMN `userip` char(46) NOT NULL DEFAULT '' AFTER `templet`;
-ALTER TABLE `#@__admin` MODIFY COLUMN `loginip` varchar(46) NOT NULL DEFAULT '' AFTER `logintime`;
-ALTER TABLE `#@__feedback` MODIFY COLUMN `ip` char(46) NOT NULL DEFAULT '' AFTER `arctitle`;
-ALTER TABLE `#@__log` MODIFY COLUMN `cip` char(46) NOT NULL DEFAULT '' AFTER `query`;
-ALTER TABLE `#@__member` MODIFY COLUMN `joinip` char(46) NOT NULL DEFAULT '' AFTER `jointime`,MODIFY COLUMN `loginip` char(46) NOT NULL DEFAULT '' AFTER `logintime`;
-ALTER TABLE `#@__shops_orders` MODIFY COLUMN `ip` char(46) NOT NULL DEFAULT '' AFTER `state`;
-ALTER TABLE `#@__dl_log` MODIFY COLUMN `ip` char(46) NOT NULL AFTER `id`;
-ALTER TABLE `#@__addoninfos` MODIFY COLUMN `nativeplace` char(20) NOT NULL DEFAULT 0 AFTER `badpost`;
-
--- 6.1.8
-INSERT INTO `#@__sysconfig` VALUES ('151', 'cfg_tags_dir', '标签生成目录', 7, 'string', '{cmspath}/a/tags');
-ALTER TABLE `#@__tagindex` DROP COLUMN `tag_pinyin`;
-
--- 6.1.9
-ALTER TABLE `#@__archives` MODIFY COLUMN `title` varchar(255) NOT NULL DEFAULT '' AFTER `money`;
-ALTER TABLE `#@__arctype` MODIFY COLUMN `typename` varchar(255) NOT NULL DEFAULT '' AFTER `sortrank`;
-ALTER TABLE `#@__admin` ADD COLUMN `pwd_new` varchar(120) NOT NULL DEFAULT '' AFTER `pwd`;
-ALTER TABLE `#@__member` ADD COLUMN `pwd_new` varchar(120) NOT NULL DEFAULT '' AFTER `pwd`;
-
--- 6.1.10
-ALTER TABLE `#@__arctype` CHANGE `namegk` `cnoverview` CHAR(255) NOT NULL DEFAULT '';
-ALTER TABLE `#@__arctype` CHANGE `ennamegk` `enoverview` CHAR(255) NOT NULL DEFAULT '';
-ALTER TABLE `#@__arctype` CHANGE `litpic` `bigpic` CHAR(255) NOT NULL DEFAULT '';
-DELETE FROM `#@__sysconfig` WHERE `#@__sysconfig`.`varname` = 'cfg_disable_funs';
-DELETE FROM `#@__sysconfig` WHERE `#@__sysconfig`.`varname` = 'cfg_disable_tags';
-DELETE FROM `#@__sysconfig` WHERE `#@__sysconfig`.`varname` = 'cfg_vdcode_member';
-
--- 6.2.0
-ALTER TABLE `#@__arctype` CHANGE COLUMN `iscross` `cross` tinyint(1) NOT NULL DEFAULT 0 AFTER `ishidden`;
-ALTER TABLE `#@__admin` ADD COLUMN `loginerr` tinyint NULL DEFAULT 0 AFTER `loginip`;
-ALTER TABLE `#@__member` ADD COLUMN `loginerr` tinyint NULL DEFAULT 0 AFTER `checkmail`;
-ALTER TABLE `#@__member` ADD COLUMN `send_max` int NULL DEFAULT 0 AFTER `loginerr`;
-
--- 6.2.3
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_bizcore_api', 'DedeBIZ Core接口服务器', 1, 'string', 'http://localhost:8087');
-
--- 6.2.5
-CREATE TABLE `#@__sys_payment` (`id` int(11) unsigned NOT NULL auto_increment,
- `code` varchar(20) NOT NULL DEFAULT '',
- `name` varchar(32) NOT NULL DEFAULT '',
- `short_name` varchar(32) DEFAULT '',
- `sortrank` int(3) unsigned NOT NULL DEFAULT '0',
- `config` text NOT NULL,
- `status` int(3) unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`id`)
-) TYPE=MyISAM;
-INSERT INTO `#@__sys_payment`(`id`, `code`, `name`, `short_name`, `sortrank`, `config`, `status`) VALUES (1, 'Wechat', '微信支付', '微信', 0, '{"AppID":"","MchID":"","APIv2Secret":""}', 0);
-INSERT INTO `#@__sys_payment`(`id`, `code`, `name`, `short_name`, `sortrank`, `config`, `status`) VALUES (2, 'Alipay', '支付宝支付', '支付宝', 1, '{"APPID":"","PrivateKey":"","CertPublicKey":"","RootCert":"AlipayRootCert","SignType":"RSA2"}', 0);
-INSERT INTO `#@__sys_payment`(`id`, `code`, `name`, `short_name`, `sortrank`, `config`, `status`) VALUES (3, 'Bank', '银行转账', '转账', 2, '{"AccountName":"泰隆商业银行上海杨浦支行","AccountNO":"31010090201000020658","Name":"上海穆云智能科技有限公司"}', 1);
-INSERT INTO `#@__sys_payment`(`id`, `code`, `name`, `short_name`, `sortrank`, `config`, `status`) VALUES (4, 'Balance', '余额支付', '余额', 3, '{}', 1);
-INSERT INTO `#@__sys_payment`(`id`, `code`, `name`, `short_name`, `sortrank`, `config`, `status`) VALUES (5, 'Cod', '货到付款', '货到付款', 4, '{}', 0);
-ALTER TABLE `#@__member` ADD COLUMN `user_money` decimal(10, 2) UNSIGNED NULL DEFAULT 0.00 AFTER `send_max`;
-
--- 6.2.7
-ALTER TABLE `#@__arctype` ADD COLUMN `apienabled` tinyint UNSIGNED NULL DEFAULT 0 AFTER `smalltypes`,ADD COLUMN `apikey` varchar(64) NULL AFTER `apienabled`;
-ALTER TABLE `#@__member` ADD COLUMN `pmid` INT(8) UNSIGNED NULL DEFAULT 0 AFTER `user_money`;
-
--- 6.2.11
-UPDATE `#@__channeltype` SET `useraddcon` = 'soft_add.php', `usermancon` = 'content_list.php', `usereditcon` = 'soft_edit.php' WHERE `id` = 3;
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_mkdir';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_host';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_port';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_user';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_pwd';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_root';
-DELETE FROM `#@__sysconfig` WHERE `varname` = 'cfg_ftp_mkdir';
-CREATE TABLE `#@__search_sync` (
- `id` int unsigned NOT NULL auto_increment,
- `aid` int NULL DEFAULT NULL,
- `sync_status` tinyint NULL DEFAULT 0,
- `add_at` int NULL DEFAULT NULL,
- `update_at` int NULL DEFAULT NULL,
- PRIMARY KEY (`id`)
-) TYPE=MyISAM;
-
--- 6.5.0
-CREATE TABLE `#@__ai` (
- `id` int NOT NULL AUTO_INCREMENT,
- `title` varchar(255) DEFAULT NULL COMMENT '名称',
- `apikey` varchar(255) DEFAULT NULL COMMENT 'apikey',
- `baseurl` varchar(255) DEFAULT NULL COMMENT '接口地址',
- `description` varchar(255) DEFAULT NULL COMMENT '描述',
- `company` varchar(255) DEFAULT NULL COMMENT '公司名称',
- `website` varchar(255) DEFAULT NULL COMMENT '官方网址',
- PRIMARY KEY (`id`)
-) TYPE=MyISAM;
-INSERT INTO `#@__ai` (`id`, `title`, `apikey`, `baseurl`, `description`, `company`, `website`) VALUES (1, 'Doubao家族模型', '', 'https://ark.cn-beijing.volces.com/api/v3', '字节跳动推出的自研AI模型,经过字节跳动内部50+业务场景实践验证,提供高质量的语言模型与多模态模型矩阵,以优质模型效果与丰富的模型组合为企业打造丰富的业务体验。', '字节跳动', 'https://www.volcengine.com/product/doubao');
-INSERT INTO `#@__ai` (`id`, `title`, `apikey`, `baseurl`, `description`, `company`, `website`) VALUES (2, 'DeepSeek模型', '', 'https://api.deepseek.com/v1', 'DeepSeek致力于探索AGI的本质,不做中庸的事,带着好奇心,用最长期的眼光去回答最大的问题。', '深度求索', 'https://www.deepseek.com/');
-INSERT INTO `#@__ai` (`id`, `title`, `apikey`, `baseurl`, `description`, `company`, `website`) VALUES (3, 'Moonshot模型', '', 'https://api.moonshot.cn/v1', 'Moonshot-v1是由Moonshot AI推出的千亿参数的语言模型,具备优秀的语义理解、指令遵循和文本生成能力。Moonshot-v1 模型可以用于各种任务,包括内容或代码生成、摘要、对话、创意写作等。', '月之暗面', 'https://www.moonshot.cn/');
-INSERT INTO `#@__ai` (`id`, `title`, `apikey`, `baseurl`, `description`, `company`, `website`) VALUES (4, 'Ollama', 'Ollama', 'http://localhost:11434/v1', 'Ollama是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。', 'Ollama', 'https://ollama.com/');
-INSERT INTO `#@__ai` (`id`, `title`, `apikey`, `baseurl`, `description`, `company`, `website`) VALUES (5, '通义千问', '', 'https://dashscope.aliyuncs.com/compatible-mode/v1', '阿里云百炼通义AI模型企业级服务平台,助力企业轻松打造最优落地效果的AI应用。', '阿里巴巴', 'https://www.aliyun.com/product/bailian');
-CREATE TABLE `#@__ai_log` (
- `lid` mediumint unsigned NOT NULL AUTO_INCREMENT,
- `adminid` smallint unsigned NOT NULL DEFAULT '0' COMMENT '管理员ID',
- `aimid` int DEFAULT NULL COMMENT '模型ID',
- `model` varchar(100) DEFAULT NULL COMMENT '模型名称',
- `pname` char(30) NOT NULL DEFAULT '' COMMENT '提示词标识',
- `prompt` text NOT NULL COMMENT '提示词',
- `cip` char(46) NOT NULL DEFAULT '' COMMENT '调用IP',
- `dtime` int unsigned NOT NULL DEFAULT '0' COMMENT '调用时间',
- `prompt_tokens` int unsigned NOT NULL DEFAULT '0' COMMENT '提示词token',
- `completion_tokens` int unsigned NOT NULL DEFAULT '0' COMMENT '完成token',
- `total_tokens` int unsigned NOT NULL DEFAULT '0' COMMENT 'token总计',
- PRIMARY KEY (`lid`)
-) TYPE=MyISAM;
-CREATE TABLE `#@__ai_model` (
- `id` int NOT NULL AUTO_INCREMENT COMMENT '模型',
- `aiid` int DEFAULT NULL COMMENT '隶属ai',
- `model` varchar(255) DEFAULT NULL COMMENT '模型ID',
- `title` varchar(255) DEFAULT NULL COMMENT '模型标题',
- `description` varchar(255) DEFAULT NULL COMMENT '模型描述',
- `isdefault` tinyint DEFAULT '0' COMMENT '是否是默认',
- `sortrank` int NOT NULL DEFAULT '50' COMMENT '排序',
- PRIMARY KEY (`id`)
-) TYPE=MyISAM;
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (1, 1, 'doubao-pro-32k-241215', 'doubao-pro-32k', 'Doubao-pro-32k全面升级,相比240828版本,整体能力显著提升,其中总结摘要、信息抽取、文本分类、复杂流程、综合任务等能力显著大幅提升。', 0, 50);
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (2, 2, 'deepseek-chat', 'deepseek-chat', '模型已全面升级为 DeepSeek-V3,接口不变3', 0, 50);
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (3, 3, 'moonshot-v1-32k', 'moonshot-v1-32k', '它是一个长度为 32k 的模型,适用于生成长文本', 0, 50);
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (4, 5, 'qwen-max-latest', 'qwen-max-latest', '通义千问系列效果最好的模型,本模型是动态更新版本,模型更新不会提前通知,适合复杂、多步骤的任务,模型中英文综合能力显著提升,模型人类偏好显著提升,模型推理能力和复杂指令理解能力显著增强,困难任务上的表现更优,数学、代码能力显著提升,提升对Table、JSON等结构化数据的理解和生成能力。', 0, 50);
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (5, 5, 'qwen-plus', 'qwen-plus', '通义千问2.5系列千亿级别超大规模语言模型,支持中文、英文等不同语言输入。随着模型的升级,qwen-max将滚动更新升级。如果希望使用固定版本,请使用历史快照版本。', 1, 50);
-INSERT INTO `#@__ai_model` (`id`, `aiid`, `model`, `title`, `description`, `isdefault`, `sortrank`) VALUES (6, 4, 'qwq:latest', 'qwq:latest', 'qwq:latest', 0, 20);
-CREATE TABLE `#@__ai_prompt` (
- `id` int NOT NULL AUTO_INCREMENT,
- `pname` varchar(60) NOT NULL COMMENT '标识',
- `title` varchar(255) DEFAULT NULL COMMENT '名称',
- `issystem` tinyint unsigned DEFAULT '0' COMMENT '系统内置 0:否 1:是',
- `description` text COMMENT '描述',
- `info` text COMMENT '提示说明',
- `prompt` mediumtext COMMENT '提示词规则',
- `dfprompt` text COMMENT '默认提示词',
- PRIMARY KEY (`id`),
- UNIQUE KEY `unq_pname` (`pname`) USING BTREE
-) TYPE=MyISAM;
-INSERT INTO `#@__ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (1, 'catalog_add', '创建栏目', 1, '根据用户输入的要求进行栏目的创建,包含栏目名称、关键词、描述等信息', '系统提示词,不建议修改', '用户将会提供一些栏目创建的要求,用来生成一个网站的栏目基础信息,栏目信息包含:\r\ntypename:中文名称,栏目中文名称,简明扼要不要包含空格和特殊字符\r\nenname:英文名称,栏目的英文名称,简明扼要结合中文名称需要翻译准确\r\ncnoverview:中文概述,栏目的中文概述信息,100字以内\r\nenoverview:英文概述,栏目的英文概述信息,100字以内\r\ntypedir:栏目生成目录,利于seo的栏目目录,需要支持url地址seo链接标准\r\nseotitle:SEO标题,便于栏目页面进行SEO的标题信息,seo符号,用-不是空格竖号空格,英文标题是空格减号空格,中文的就只有减号-\r\nkeywords:栏目关键词,提炼概括栏目信息的最核心的关键词,至少3个,关键词的用英文豆号隔开,不是中文大写逗号\r\ndescription:栏目描述,栏目的描述信息\r\ncontent:栏目详细介绍,500字以内,html格式\r\n\r\n需要按照参考格式返回,以满足用户需求优先\r\n\r\n参考输入 EXAMPLE INPUT:\r\n我需要一个穆云智能科技信息的栏目\r\n\r\n参考格式返回 EXAMPLE OUTPUT:\r\n{typename}穆云智能科技{/typename}\r\n{enname}Muyun Intelligent Technology{/enname}\r\n{cnoverview}穆云智能科技聚焦人工智能与大数据技术研发,提供智能化解决方案及创新产品,涵盖AI算法、数据分析、工业物联网等领域,助力企业数字化转型与技术升级。{/cnoverview}\r\n{enoverview}Muyun Intelligent Technology specializes in AI and big data R&D, delivering intelligent solutions and innovative products including AI algorithms, data analytics, and industrial IoT to empower enterprise digital transformation.{/enoverview}\r\n{typedir}muyun-intelligent-technology{/typedir}\r\n{seotitle}穆云智能科技 | 人工智能与大数据解决方案 | 创新科技企业{/seotitle}\r\n{keywords}人工智能,大数据解决方案,智能科技企业{/keywords}\r\n{description}穆云智能科技专注于人工智能与大数据技术的研发与应用,提供智能解决方案与创新产品,助力企业数字化转型,探索科技前沿发展。{/description}\r\n{content}穆云智能科技专注于人工智能与大数据技术的研发与应用,致力于为企业提供智能化解决方案,推动数字化转型。公司通过深度学习、自然语言处理、计算机视觉等先进技术,提供智能客服、图像识别、数据挖掘等服务,帮助企业提升效率、优化决策。
在大数据领域,穆云智能科技通过智能数据处理与分析,帮助企业深度挖掘数据价值,优化资源配置,提升运营效率。公司为客户量身定制解决方案,确保技术与实际需求的紧密结合,为企业提供精准的业务洞察。穆云智能科技与科研机构和高校保持合作,持续关注科技前沿,推动技术创新。公司秉承“创新驱动,智能引领”的理念,致力于通过技术赋能推动行业智慧化升级,助力企业在激烈市场竞争中脱颖而出。未来,穆云智能科技将继续拓展技术应用领域,助力更多企业实现数字化和智能化转型。
{/content}', '我需要创建一个介绍穆云智能科技公司的栏目');
-INSERT INTO `#@__ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (2, 'catalog_add_quick', '批量添加栏目', 1, '根据用户提供描述,规划站点栏目结构,批量构建站点栏目信息', '系统提示词,不建议修改', '你是专业的网站运营,用户将会提供一些网站建设思考和栏目构建的要求,根据要求进行网站栏目的策划,并生成一级栏目和二级栏目(可选),栏目名称不要包含首页、主页\r\ntoptype:一级栏目,需要简单明了,英文翻译准确\r\nsontype:二级栏目,如果存在多个,采用英文逗号\",\"进行分割,可选\r\n注意一级栏目和二级栏目后的序号:空、1、2、3、4、5等\r\n\r\n参考输入 EXAMPLE INPUT:\r\n我需要创建一个企业信息展示类站点\r\n\r\n参考格式返回 EXAMPLE OUTPUT:\r\n{toptype}关于我们{/toptype}\r\n{sontype}企业介绍,组织架构,领导致辞{/sontype}\r\n{toptype2}企业服务{/toptype2}\r\n{sontype2}商品信息,服务介绍{/sontype2}\r\n{toptype3}招聘信息{/toptype3}\r\n{toptype4}合作伙伴{/toptype4}\r\n{toptype5}企业动态{/toptype5}\r\n{sontype5}公司新闻,行业新闻{/sontype5}', '我需要创建一个企业信息展示类站点');
-INSERT INTO `#@__ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (3, 'catalog_edit', '栏目修改', 1, '根据要求对栏目信息进行修改', '系统提示词变量,不建议修改。
typeinfo:原栏目信息', '用户将会提供一些栏目编辑优化的要求,用来优化现有网站的栏目基础信息,栏目信息包含:\ntypename:中文名称,栏目中文名称,简明扼要不要包含空格和特殊字符\nenname:英文名称,栏目的英文名称,简明扼要结合中文名称需要翻译准确\ncnoverview:中文概述,栏目的中文概述信息,100字以内\nenoverview:英文概述,栏目的英文概述信息,100字以内\nseotitle:SEO标题,便于栏目页面进行SEO的标题信息,seo符号,用-不是空格竖号空格,英文标题是空格减号空格,中文的就只有减号-\nkeywords:栏目关键词,提炼概括栏目信息的最核心的关键词,至少3个,关键词的用英文豆号隔开,不是中文大写逗号\ndescription:栏目描述,栏目的描述信息\ncontent:栏目详细介绍,500字以内,html格式\n\n现有栏目信息如下:~typeinfo~\n\n需要按照参考格式返回,以满足用户需求优先,栏目名称不要包含首页\n\n参考输入 EXAMPLE INPUT:\n我需要一个穆云智能科技信息的栏目\n\n参考格式返回 EXAMPLE OUTPUT:\n{typename}穆云智能科技{/typename}\n{enname}Muyun Intelligent Technology{/enname}\n{cnoverview}穆云智能科技聚焦人工智能与大数据技术研发,提供智能化解决方案及创新产品,涵盖AI算法、数据分析、工业物联网等领域,助力企业数字化转型与技术升级。{/cnoverview}\n{enoverview}Muyun Intelligent Technology specializes in AI and big data R&D, delivering intelligent solutions and innovative products including AI algorithms, data analytics, and industrial IoT to empower enterprise digital transformation.{/enoverview}\n{seotitle}穆云智能科技 - 人工智能与大数据解决方案 - 创新科技企业{/seotitle}\n{keywords}人工智能,大数据解决方案,智能科技企业{/keywords}\n{description}穆云智能科技专注于人工智能与大数据技术的研发与应用,提供智能解决方案与创新产品,助力企业数字化转型,探索科技前沿发展。{/description}\n{content}穆云智能科技专注于人工智能与大数据技术的研发与应用,致力于为企业提供智能化解决方案,推动数字化转型。公司通过深度学习、自然语言处理、计算机视觉等先进技术,提供智能客服、图像识别、数据挖掘等服务,帮助企业提升效率、优化决策。
在大数据领域,穆云智能科技通过智能数据处理与分析,帮助企业深度挖掘数据价值,优化资源配置,提升运营效率。公司为客户量身定制解决方案,确保技术与实际需求的紧密结合,为企业提供精准的业务洞察。穆云智能科技与科研机构和高校保持合作,持续关注科技前沿,推动技术创新。公司秉承“创新驱动,智能引领”的理念,致力于通过技术赋能推动行业智慧化升级,助力企业在激烈市场竞争中脱颖而出。未来,穆云智能科技将继续拓展技术应用领域,助力更多企业实现数字化和智能化转型。
{/content}', '栏目信息内容需要更丰富一些');
-INSERT INTO `#@__ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (4, 'article_add', '添加文档', 1, '根据用户要求编写文档', '系统提示词变量,不建议修改。
typelist:栏目列表', '用户将会提供一些文章编写的要求,用来生成一篇文章,文章信息包含:\ntitle:文章标题\nshorttitle:简略标题,文章短标题\ntags:标签,英文逗号隔开,如:DedeBIZ,得德\ntypeid:整数,隶属栏目,结合生成的内容,从下面栏目信息中选择对应的栏目ID,必须选择一个栏目ID,不能为空\nkeywords:文章关键词,提炼概括内容最核心的关键词,至少3个,关键词的用英文豆号隔开,不是中文大写逗号\ndescription:文章描述,文章的描述信息\nbody:文章详情,html格式,如果有副标题采用h2、h3\n\n~typelist~\n\n内容部分以满足用户需求优先,严格按照参考格式返回\n\n参考输入 EXAMPLE INPUT:\n帮我写一篇简短的介绍穆云智能科技的文章\n\n参考格式返回 EXAMPLE OUTPUT:\n{title}穆云智能科技公司介绍{/title} \n{shorttitle}穆云智能科技{/shorttitle} \n{tags}人工智能,AI技术,智能科技{/tags} \n{typeid}5{/typeid} \n{keywords}人工智能,智能科技,AI应用{/keywords} \n{description}穆云智能科技致力于人工智能技术的创新与应用,提供智能解决方案,赋能企业数字化转型,推动行业智能化升级。{/description} \n{body}公司简介
穆云智能科技是一家专注于人工智能技术研发与应用的高科技企业,致力于为各行业提供智能化解决方案,助力企业提升效率,推动数字化转型。公司业务涵盖计算机视觉、自然语言处理、机器学习等多个AI技术领域,并广泛应用于营销、制造、金融、医疗等行业。
核心技术
- 计算机视觉:提供图像识别、目标检测、视频分析等智能视觉应用。
- 自然语言处理:具备文本理解、智能对话、语音识别等AI能力。
- 机器学习与大数据:结合深度学习与数据分析,助力智能决策。
应用场景
穆云智能科技的AI技术已经成功应用于多个领域,如:
智能营销
:AI驱动内容生成、智能投放优化,提升营销效果。智能制造
:设备预测维护、智能质检,提高生产效率。智慧金融
:智能风控、自动客服,优化金融服务体验。医疗健康
:辅助诊断、医学影像分析,推动智慧医疗发展。
企业愿景
穆云智能科技秉持“智能创新,赋能未来”的理念,持续深耕AI技术,为全球企业提供高效、智能的解决方案,助力行业升级,共创智能未来。
{/body}', '我需要写一篇介绍穆云智能科技公司的文章');
-INSERT INTO `#@__ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (5, 'article_edit', '文档修改', 1, '更具用户要求对文档进行内容优化', '系统提示词变量,不建议修改。
typelist:栏目列表
articleinfo:原文档信息', '用户将会提供一些文章优化要求,按照要求将下面的文章内容进行优化:\n字段说明:\ntitle:文章标题\nshorttitle:简略标题,文章短标题\ntags:标签,英文逗号隔开,如:DedeBIZ,得德\ntypeid:整数,隶属栏目,结合生成的内容,从下面栏目信息中选择对应的栏目ID,必须选择一个栏目ID,不能为空\nkeywords:文章关键词,提炼概括内容最核心的关键词,至少3个,关键词的用英文豆号隔开,不是中文大写逗号\ndescription:文章描述,文章的描述信息\nbody:文章详情,html格式,如果有副标题采用h2、h3\n\n~typelist~\n\n~articleinfo~\n\n内容部分以满足用户需求优先,严格按照参考格式返回\n\n参考输入 EXAMPLE INPUT:\n我需要对当前文章就行润色,内容轻松活泼些,不要出现错别字\n\n参考原文:\n{title}穆云智能科技公司介绍{/title} \n{shorttitle}穆云智能科技{/shorttitle} \n{tags}人工智能,AI技术,智能科技{/tags} \n{typeid}5{/typeid} \n{keywords}人工智能,智能科技,AI应用{/keywords} \n{description}穆云智能科技致力于人工智能技术的创新与应用,提供智能解决方案,赋能企业数字化转型,推动行业智能化升级。{/description} \n{body}公司简介
穆云智能科技是一家专注于人工智能技术研发与应用的高科技企业,致力于为各行业提供智能化解决方案,助力企业提升效率,推动数字化转型。公司业务涵盖计算机视觉、自然语言处理、机器学习等多个AI技术领域,并广泛应用于营销、制造、金融、医疗等行业。
核心技术
- 计算机视觉:提供图像识别、目标检测、视频分析等智能视觉应用。
- 自然语言处理:具备文本理解、智能对话、语音识别等AI能力。
- 机器学习与大数据:结合深度学习与数据分析,助力智能决策。
应用场景
穆云智能科技的AI技术已经成功应用于多个领域,如:
智能营销
:AI驱动内容生成、智能投放优化,提升营销效果。智能制造
:设备预测维护、智能质检,提高生产效率。智慧金融
:智能风控、自动客服,优化金融服务体验。医疗健康
:辅助诊断、医学影像分析,推动智慧医疗发展。
企业愿景
穆云智能科技秉持“智能创新,赋能未来”的理念,持续深耕AI技术,为全球企业提供高效、智能的解决方案,助力行业升级,共创智能未来。
{/body}\n\n参考格式返回 EXAMPLE OUTPUT:\n{title}穆云智能科技:AI驱动未来,智能赋能企业{/title} \n{shorttitle}穆云智能科技{/shorttitle} \n{tags}人工智能,AI技术,智能科技{/tags} \n{typeid}5{/typeid} \n{keywords}人工智能,智能科技,AI应用{/keywords} \n{description}穆云智能科技专注于人工智能创新,提供智能化解决方案,助力企业数字化转型,推动行业迈向智能新时代。{/description} \n{body}公司简介
穆云智能科技是一家充满创新活力的AI科技公司,致力于推动人工智能技术在各行业的应用,让企业拥抱智能化时代。公司专注于计算机视觉、自然语言处理、机器学习等核心AI技术,广泛应用于营销、制造、金融、医疗等多个领域,助力企业降本增效,实现智能升级。
核心技术
计算机视觉
:智能图像识别、目标检测、视频分析,让机器“看得懂”。自然语言处理
:文本理解、智能对话、语音识别,打造更自然的人机交互体验。机器学习与大数据
:融合深度学习与数据分析,助力企业智能决策。
应用场景
穆云智能科技的AI技术已经在多个行业落地,创造了诸多价值:
智能营销
:AI辅助内容创作、精准广告投放,让营销更高效。智能制造
:设备预测维护、智能质检,助力企业提升生产力。智慧金融
:智能风控、自动客服,优化金融服务体验。医疗健康
:AI辅助诊断、医学影像分析,助力智慧医疗发展。
企业愿景
穆云智能科技秉持“智能创新,赋能未来”的理念,持续探索AI的更多可能,为企业提供更智能、更高效的解决方案,让科技真正服务于产业,共创智能新时代!
{/body}', '我需要对当前文章就行润色,内容轻松活泼些,不要出现错别字');
-INSERT INTO `biz_ai_prompt` (`id`, `pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES (6, 'tools_translate', '智能翻译官', 0, '将用户输入的内容翻译成英文', NULL, '你是一个专业的英文老师,根据用户提出的要求将内容翻译为英文。', '帮我翻译下“穆云智能科技有限公司”');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_server', '服务器地址', 8, 'string', 'http://localhost:8087');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_apikey', '通信密钥', 8, 'string', '1SYkhWQ1oew264BXof8OvlRafKHmyG');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_max_tokens', '最大令牌数(为空则不限,默认采用模型默认值)', 8, 'string', '');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_temperature', '采样温度(为空则采用模型默认值)', 8, 'string', '');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_top_p', '核采样(为空则采用模型默认值)', 8, 'string', '');
-INSERT INTO `#@__sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_ai_enabled', '是否开启智能功能', 8, 'bool', 'Y');
-CREATE TABLE `#@__tagindex_infos` (
- `tagid` int NOT NULL,
- `litpic` varchar(255) DEFAULT NULL,
- `body` mediumtext,
- PRIMARY KEY (`tagid`)
-) TYPE=MyISAM;
-
--- 6.5.2
-INSERT INTO `#@__ai_prompt` (`pname`, `title`, `issystem`, `description`, `info`, `prompt`, `dfprompt`) VALUES ('body_edit', '编辑器内容修改', 1, '富文本编辑器中内容修改', '系统提示词变量,不建议修改。需要助手1.0.3版本以上
body:富文本内容', '用户将会提供内容修改要求,根据要求对下面的内容进行处理,需要保障html的完整。严格按照参考格式返回。\r\n\r\n内容:\r\n{content}~body~{/content}\r\n\r\n参考输入 EXAMPLE INPUT:\r\n帮我加粗“穆云智能”\r\n\r\n参考格式返回 EXAMPLE OUTPUT:\r\n{content}公司简介
穆云智能科技是一家专注于人工智能技术研发与应用的高科技企业,致力于为各行业提供智能化解决方案,助力企业提升效率,推动数字化转型。公司业务涵盖计算机视觉、自然语言处理、机器学习等多个AI技术领域,并广泛应用于营销、制造、金融、医疗等行业。
{/content}', '我需要将内容润色下,希望更专业');
-INSERT INTO `#@__flink` (`sortrank`, `url`, `webname`, `msg`, `email`, `logo`, `dtime`, `typeid`, `ischeck`) VALUES(4, 'https://www.dedebiz.com/ai', 'AI建站', '', '', '', 1742983936, 8, 2);
\ No newline at end of file
diff --git a/src/system/common.func.php b/src/system/common.func.php
index 6fce0396..e6d052ae 100755
--- a/src/system/common.func.php
+++ b/src/system/common.func.php
@@ -365,14 +365,24 @@ function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 0)
*/
function TableHasField($tablename, $field)
{
- global $dsql;
- $dsql->GetTableFields($tablename,"tfd");
- while ($r = $dsql->GetFieldObject("tfd")) {
- if ($r->name === $field) {
- return true;
+ global $dsql,$cfg_dbtype;
+ if ($cfg_dbtype === 'mysql') {
+ $dsql->GetTableFields($tablename,"tfd");
+ while ($r = $dsql->GetFieldObject("tfd")) {
+ if ($r->name === $field) {
+ return true;
+ }
+ }
+ return false;
+ } elseif ($cfg_dbtype === 'sqlite') {
+ $k = $dsql->GetTableFields($tablename);
+ while ($r = $dsql->GetFieldObject($k)) {
+ if ($r->name === $field) {
+ return true;
+ }
}
+ return false;
}
- return false;
}
function GetSimpleServerSoftware()
{
@@ -459,7 +469,7 @@ function GetUpdateSQL()
$result = array();
$query = '';
$sql4tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language;
- $fp = fopen(DEDEROOT.'/install/update.txt','r');
+ $fp = fopen(DEDEDATA.'/admin/update.txt','r');
$sqls = array();
$current_ver = '';
while(!feof($fp))
@@ -692,6 +702,108 @@ function DedeSearchAPIURL($action, $parms=array())
return $finalUrl;
}
+
+function ConvertMysqlToSqlite($mysqlQuery) {
+ // 移除 CHARACTER SET 和 COLLATE
+ $query = preg_replace('/character set \S+/i', '', $mysqlQuery);
+ $query = preg_replace('/collate \S+/i', '', $query);
+
+ // 移除 unsigned 关键字
+ $query = str_replace('unsigned', '', $query);
+
+ // 替换 MySQL 的整数类型为 SQLite 的 INTEGER
+ $query = preg_replace('/\b(TINY|SMALL|MEDIUM|BIG)?INT\(\d+\)/i', 'INTEGER', $query);
+
+ // 替换 AUTO_INCREMENT 为 PRIMARY KEY AUTOINCREMENT (仅适用于 INTEGER 类型)
+ $query = preg_replace('/\bINTEGER\s+NOT NULL\s+PRIMARY KEY AUTOINCREMENT/i', 'INTEGER PRIMARY KEY AUTOINCREMENT', $query);
+ $query = preg_replace('/\bAUTO_INCREMENT\b/i', '', $query);
+
+ // 移除 MySQL 特有的 ENGINE、CHARSET、COLLATE、TYPE 选项
+ $query = preg_replace('/ENGINE=\S+/i', '', $query);
+ $query = preg_replace('/DEFAULT CHARSET=\S+/i', '', $query);
+ $query = preg_replace('/COLLATE=\S+/i', '', $query);
+ $query = preg_replace('/TYPE=MyISAM;/i', '', $query);
+
+ // 移除 COMMENT 语法(SQLite 不支持)
+ $query = preg_replace('/COMMENT\s+\'[^\']*\'/i', '', $query);
+
+ // 移除 KEY 和 UNIQUE KEY 定义(SQLite 会自动管理索引),同时处理 USING BTREE
+ $query = preg_replace('/,?\s*KEY\s+\S+\s*\([^)]*\)\s*(USING BTREE)?/i', '', $query);
+ $query = preg_replace('/,?\s*UNIQUE KEY\s+\S+\s*\([^)]*\)\s*(USING BTREE)?/i', '', $query);
+
+ // 移除不完整的 UNIQUE 定义
+ $query = preg_replace('/,?\s*UNIQUE\s*(?!\()/', '', $query);
+
+ // 替换 ENUM 和 SET 为 TEXT
+ $query = preg_replace('/\b(ENUM|SET)\([^)]*\)/i', 'TEXT', $query);
+
+ // 替换 MEDIUMTEXT 为 TEXT
+ $query = preg_replace('/\bMEDIUMTEXT\b/i', 'TEXT', $query);
+
+ // 处理 DEFAULT CURRENT_TIMESTAMP
+ $query = preg_replace('/DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP/i', 'DEFAULT CURRENT_TIMESTAMP', $query);
+
+ // 处理 DEFAULT 值
+ $query = preg_replace('/DEFAULT\s+\'([^\']+)\'/i', 'DEFAULT "$1"', $query);
+
+ // 处理 PRIMARY KEY 只能用于 INTEGER
+ if (preg_match('/PRIMARY KEY \(`(\w+)`\)/', $query, $matches)) {
+ $primaryKeyColumn = $matches[1];
+ $query = preg_replace('/,?\s*PRIMARY KEY\s*\(`' . $primaryKeyColumn . '`\)/i', '', $query);
+ $query = preg_replace('/(`' . $primaryKeyColumn . '`\s+INTEGER)/i', '$1 PRIMARY KEY', $query);
+ }
+
+ // 处理 CONCAT 替换为 SQLite 兼容形式
+ if (preg_match('/CONCAT\(([^)]*?)\)/i', $query, $matches)) {
+ $query = preg_replace('/CONCAT\(([^)]*?)\)/i', str_replace(",", "||", $matches[1]), $query);
+ $query = str_replace("'||'", "','", $query);
+ }
+
+ // 修正 FIND_IN_SET 替换
+ $query = preg_replace("/FIND_IN_SET\('([\w]+)', arc.flag\)>0/i", "(',' || arc.flag || ',') LIKE '%,\\1,%'", $query);
+ $query = preg_replace("/FIND_IN_SET\('([\w]+)', arc.flag\)<1/i", "(',' || arc.flag || ',') NOT LIKE '%,\\1,%'", $query);
+
+ // 修正 FIND_IN_SET 替换(允许列名包含点号)
+ $query = preg_replace_callback(
+ "/FIND_IN_SET\s*\(\s*'([^']+)'\s*,\s*([a-zA-Z0-9_`\.]+)\s*\)/i",
+ function ($matches) {
+ // 返回 SQLite 兼容的 LIKE 语法
+ return "(',' || " . $matches[2] . " || ',' LIKE '%," . $matches[1] . ",%')";
+ },
+ $query
+ );
+ // 替换 FIELD 函数为 CASE 表达式
+ $query = preg_replace_callback(
+ '/\bFIELD\s*\(\s*([^,]+)\s*,\s*((?:\'[^\']+\'|`[^`]+`|[^),]+(?:,\s*)?)+)\s*\)/i',
+ function ($matches) {
+ $field = trim($matches[1]);
+ $values = trim($matches[2]);
+
+ // 更精确分割值列表(支持带引号、反引号及无空格分隔的数值)
+ preg_match_all('/\'[^\']+\'|`[^`]+`|\d+|\w+/', $values, $valueParts);
+
+ $cases = [];
+ $position = 1;
+ foreach ($valueParts[0] as $value) {
+ $cases[] = "WHEN $field = $value THEN $position";
+ $position++;
+ }
+
+ return "(CASE " . implode(' ', $cases) . " ELSE 0 END)";
+ },
+ $query
+ );
+ // 新增的转换逻辑
+ $query = preg_replace("/SHOW fields FROM `([\w]+)`/i", "PRAGMA table_info('\\1') ", $query);
+ $query = preg_replace("/SHOW CREATE TABLE `([\w]+)`/i", "SELECT 0,sql FROM sqlite_master WHERE name='\\1'; ", $query);
+ $query = preg_replace("/Show Tables/i", "SELECT name FROM sqlite_master WHERE type = \"table\"", $query);
+ $query = str_replace("\'", "\"", $query);
+ $query = str_replace('\t\n', "", $query);
+ $query = str_ireplace('rand', 'RANDOM', $query);
+
+ return trim($query);
+}
+
//自定义函数接口
if (file_exists(DEDEINC.'/extend.func.php')) {
require_once(DEDEINC.'/extend.func.php');
diff --git a/src/system/database/dedesqlite.class.php b/src/system/database/dedesqlite.class.php
index 42bd52e6..d8dba60e 100755
--- a/src/system/database/dedesqlite.class.php
+++ b/src/system/database/dedesqlite.class.php
@@ -56,7 +56,7 @@ class DedeSqlite
var $isInit = false;
var $pconnect = false;
var $_fixObject;
- var $_fieldIdx = 1; //这里最好是数组,对应id,但由于用的地方不多,暂时先这样处理
+ var $_fieldIdx = array(); //这里最好是数组,对应id,但由于用的地方不多,暂时先这样处理
//用外部定义的变量初始类,并连接数据库
function __construct($pconnect = FALSE, $nconnect = FALSE)
{
@@ -253,7 +253,7 @@ class DedeSqlite
CheckSql($this->queryString);
}
$t1 = ExecTime();
- //var_dump($this->queryString);
+ // var_dump($this->queryString);
$this->result[$id] = $this->linkID->query($this->queryString);
if (!$this->result[$id]) {
$this->DisplayError("执行SQL错误:{$this->linkID->lastErrorMsg()}");
@@ -386,7 +386,7 @@ class DedeSqlite
return $sqlite_version;
}
//获取特定表的信息
- function GetTableFields($tbname, $id = "me")
+ function GetTableFields($tbname)
{
global $dsqlite;
if (!$dsqlite->isInit) {
@@ -395,29 +395,27 @@ class DedeSqlite
$prefix = "#@__";
$tbname = str_replace($prefix, $GLOBALS['cfg_dbprefix'], $tbname);
$query = "SELECT * FROM {$tbname} LIMIT 1";
- $this->result[$id] = $this->linkID->query($query);
+ $result = $this->linkID->query($query);
+ $key = spl_object_hash($result);
+ $this->result[$key] = $result;
+ $this->_fieldIdx[$key] = 0;
+ return $key ;
}
//获取字段详细信息
function GetFieldObject($id = "me")
{
- if (!$this->result[$id]) {
+ if (!isset($this->result[$id]) || !$this->result[$id]) {
return false;
}
$cols = $this->result[$id]->numColumns();
- if ($this->_fieldIdx >= $cols) {
- $this->_fieldIdx = 1;
+ if ($this->_fieldIdx[$id] >= $cols) {
return false;
}
- for ($i = 1; $i <= $cols; $i++) {
- $field = new stdClass;
- $n = $this->result[$id]->columnName($i);
- $field->name = $n;
- if ($this->_fieldIdx === $i) {
- $this->_fieldIdx++;
- return $field;
- }
- }
- return false;
+ $n = $this->result[$id]->columnName($this->_fieldIdx[$id]);
+ $field = new stdClass();
+ $field->name = $n;
+ $this->_fieldIdx[$id]++;
+ return $field;
}
//获得查询的总记录数
function GetTotalRow($id = "me")
@@ -460,41 +458,7 @@ class DedeSqlite
{
$prefix = "#@__";
$sql = str_replace($prefix, $GLOBALS['cfg_dbprefix'], $sql);
- $this->queryString = $sql;
- //$this->queryString = preg_replace("/CONCAT\(',', arc.typeid2, ','\)/i","printf(',%s,', arc.typeid2)",$this->queryString);
- if (preg_match("/CONCAT\(([^\)]*?)\)/i", $this->queryString, $matches)) {
- $this->queryString = preg_replace("/CONCAT\(([^\)]*?)\)/i", str_replace(",", "||", $matches[1]), $this->queryString);
- $this->queryString = str_replace("'||'", "','", $this->queryString);
- }
- $this->queryString = preg_replace("/FIND_IN_SET\('([\w]+)', arc.flag\)>0/i", "(',' || arc.flag || ',') LIKE '%,\\1,%'", $this->queryString);
- $this->queryString = preg_replace("/FIND_IN_SET\('([\w]+)', arc.flag\)<1/i", "(',' || arc.flag || ',') NOT LIKE '%,\\1,%'", $this->queryString);
- if (preg_match("/CREATE TABLE/i", $this->queryString)) {
- $this->queryString = preg_replace("/[\r\n]/", '', $this->queryString);
- $this->queryString = preg_replace('/character set (.*?) /i', '', $this->queryString);
- $this->queryString = preg_replace('/unsigned/i', '', $this->queryString);
- $this->queryString = str_replace('TYPE=MyISAM', '', $this->queryString);
- $this->queryString = preg_replace('/TINYINT\(([\d]+)\)/i', 'INTEGER', $this->queryString);
- $this->queryString = preg_replace('/mediumint\(([\d]+)\)/i', 'INTEGER', $this->queryString);
- $this->queryString = preg_replace('/smallint\(([\d]+)\)/i', 'INTEGER', $this->queryString);
- $this->queryString = preg_replace('/int\(([\d]+)\)/i', 'INTEGER', $this->queryString);
- $this->queryString = preg_replace('/auto_increment/i', 'PRIMARY KEY AUTOINCREMENT', $this->queryString);
- $this->queryString = preg_replace('/, KEY(.*?)MyISAM;/i', '', $this->queryString);
- $this->queryString = preg_replace('/, KEY(.*?);/i', ');', $this->queryString);
- $this->queryString = preg_replace('/, UNIQUE KEY(.*?);/i', ');', $this->queryString);
- $this->queryString = preg_replace('/set\(([^\)]*?)\)/', 'varchar', $this->queryString);
- $this->queryString = preg_replace('/enum\(([^\)]*?)\)/', 'varchar', $this->queryString);
- if (preg_match("/PRIMARY KEY AUTOINCREMENT/", $this->queryString)) {
- $this->queryString = preg_replace('/,([\t\s ]+)PRIMARY KEY \(`([0-9a-zA-Z]+)`\)/i', '', $this->queryString);
- $this->queryString = str_replace(', PRIMARY KEY (`id`)', '', $this->queryString);
- }
- }
- $this->queryString = preg_replace("/SHOW fields FROM `([\w]+)`/i", "PRAGMA table_info('\\1') ", $this->queryString);
- $this->queryString = preg_replace("/SHOW CREATE TABLE .([\w]+)/i", "SELECT 0,sql FROM sqlite_master WHERE name='\\1'; ", $this->queryString);
- //var_dump($this->queryString);
- $this->queryString = preg_replace("/Show Tables/i", "SELECT name FROM sqlite_master WHERE type = \"table\"", $this->queryString);
- $this->queryString = str_replace("\'", "\"", $this->queryString);
- $this->queryString = str_replace('\t\n', "", $this->queryString);
- $this->queryString = str_ireplace('rand', 'RANDOM', $this->queryString);
+ $this->queryString = ConvertMysqlToSqlite($sql);
//var_dump($this->queryString);
}
function SetSql($sql)