- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零 - Attachment 模型补 表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患 - install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空 - AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过) - 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整 - 框架版本 1.1.0 -> 1.1.1
148 lines
6.4 KiB
SQL
148 lines
6.4 KiB
SQL
-- ============================================================
|
||
-- 表名规范化迁移 v2:通用表加 common_ / 会员相关表加 member_ 前缀
|
||
-- 作用:将老库中无前缀的业务表重命名为带前缀的新表名,
|
||
-- 与 public/install/install.sql 最新定义保持一致。
|
||
-- 覆盖映射(前缀自动探测,任意数据库前缀通用):
|
||
-- addon -> common_addon
|
||
-- attachment -> common_attachment
|
||
-- configure -> common_configure
|
||
-- links -> common_links
|
||
-- spider_log -> common_spider_log
|
||
-- spider_stat -> common_spider_stat
|
||
-- sms -> common_sms
|
||
-- member_wallets-> member_wallet (去复数,不加前缀)
|
||
-- notice -> common_notice
|
||
-- ad -> common_ad
|
||
-- task -> common_task
|
||
-- prop -> common_prop
|
||
-- medal -> common_medal
|
||
-- help -> common_help
|
||
-- card -> common_card
|
||
-- score_rule -> member_score_rule
|
||
-- score_log -> member_score_log
|
||
-- addon_config -> common_addonconf (框架统一插件配置表)
|
||
-- 字段变更:
|
||
-- common_nav_menu 新增 app varchar(30) NOT NULL DEFAULT ''(url 之后)
|
||
-- 说明:
|
||
-- 1) 自动从框架核心表 backend_admin 反推表前缀(如 wxapp_),
|
||
-- 无需手工替换前缀。
|
||
-- 2) 幂等:仅当「旧表存在 && 新表不存在」才 RENAME,重复执行安全。
|
||
-- 3) RENAME TABLE 是原子操作,不影响列定义与数据。
|
||
-- 4) 若库中同时存在旧表与新表(数据分裂),旧表将被跳过、不合并,
|
||
-- 请先人工核对处理再执行。
|
||
-- 5) 列级变更(nav_menu.app)通过 information_schema 检查,已存在则跳过。
|
||
-- ============================================================
|
||
|
||
DELIMITER //
|
||
|
||
-- 单表重命名:旧表存在且新表不存在时才执行
|
||
DROP PROCEDURE IF EXISTS `__rename_if`//
|
||
CREATE PROCEDURE `__rename_if`(IN p_old VARCHAR(64), IN p_new VARCHAR(64))
|
||
BEGIN
|
||
IF EXISTS (
|
||
SELECT 1 FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_old
|
||
) AND NOT EXISTS (
|
||
SELECT 1 FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_new
|
||
) THEN
|
||
SET @sql = CONCAT('RENAME TABLE `', p_old, '` TO `', p_new, '`');
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END//
|
||
|
||
-- 加列:列不存在时才加(幂等)
|
||
DROP PROCEDURE IF EXISTS `__add_col_if_missing`//
|
||
CREATE PROCEDURE `__add_col_if_missing`(IN p_table VARCHAR(64), IN p_column VARCHAR(64), IN p_definition TEXT)
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT 1 FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = p_table
|
||
AND COLUMN_NAME = p_column
|
||
) AND EXISTS (
|
||
SELECT 1 FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table
|
||
) THEN
|
||
SET @sql = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `', p_column, '` ', p_definition);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END//
|
||
|
||
-- 主流程:探测前缀 + 批量重命名 + 加列
|
||
DROP PROCEDURE IF EXISTS `__migrate_table_prefix`//
|
||
CREATE PROCEDURE `__migrate_table_prefix`()
|
||
BEGIN
|
||
DECLARE v_prefix VARCHAR(64) DEFAULT '';
|
||
DECLARE v_p VARCHAR(70) DEFAULT '';
|
||
|
||
-- 1) 反推表前缀:wxapp_backend_admin -> wxapp(不含尾部下划线)
|
||
SELECT SUBSTRING_INDEX(TABLE_NAME, '_backend_admin', 1) INTO v_prefix
|
||
FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME LIKE '%\_backend\_admin'
|
||
LIMIT 1;
|
||
|
||
-- 2) 兜底:无 backend_admin 的库尝试用导航表反推
|
||
IF v_prefix = '' THEN
|
||
SELECT SUBSTRING_INDEX(TABLE_NAME, '_common_nav_menu', 1) INTO v_prefix
|
||
FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME LIKE '%\_common\_nav\_menu'
|
||
LIMIT 1;
|
||
END IF;
|
||
|
||
-- 3) 无法探测则输出提示并终止
|
||
IF v_prefix = '' THEN
|
||
SELECT '无法自动探测表前缀,请将脚本中 CONCAT(v_prefix,...) 替换为真实前缀(如 wxapp_)后执行' AS notice;
|
||
ELSE
|
||
SET v_p = CONCAT(v_prefix, '_');
|
||
|
||
-- 表重命名(17 张)
|
||
CALL __rename_if(CONCAT(v_p, 'addon'), CONCAT(v_p, 'common_addon'));
|
||
CALL __rename_if(CONCAT(v_p, 'attachment'), CONCAT(v_p, 'common_attachment'));
|
||
CALL __rename_if(CONCAT(v_p, 'configure'), CONCAT(v_p, 'common_configure'));
|
||
CALL __rename_if(CONCAT(v_p, 'links'), CONCAT(v_p, 'common_links'));
|
||
CALL __rename_if(CONCAT(v_p, 'spider_log'), CONCAT(v_p, 'common_spider_log'));
|
||
CALL __rename_if(CONCAT(v_p, 'spider_stat'), CONCAT(v_p, 'common_spider_stat'));
|
||
CALL __rename_if(CONCAT(v_p, 'sms'), CONCAT(v_p, 'common_sms'));
|
||
CALL __rename_if(CONCAT(v_p, 'member_wallets'),CONCAT(v_p, 'member_wallet'));
|
||
CALL __rename_if(CONCAT(v_p, 'notice'), CONCAT(v_p, 'common_notice'));
|
||
CALL __rename_if(CONCAT(v_p, 'ad'), CONCAT(v_p, 'common_ad'));
|
||
CALL __rename_if(CONCAT(v_p, 'task'), CONCAT(v_p, 'common_task'));
|
||
CALL __rename_if(CONCAT(v_p, 'prop'), CONCAT(v_p, 'common_prop'));
|
||
CALL __rename_if(CONCAT(v_p, 'medal'), CONCAT(v_p, 'common_medal'));
|
||
CALL __rename_if(CONCAT(v_p, 'help'), CONCAT(v_p, 'common_help'));
|
||
CALL __rename_if(CONCAT(v_p, 'card'), CONCAT(v_p, 'common_card'));
|
||
CALL __rename_if(CONCAT(v_p, 'score_rule'), CONCAT(v_p, 'member_score_rule'));
|
||
CALL __rename_if(CONCAT(v_p, 'score_log'), CONCAT(v_p, 'member_score_log'));
|
||
CALL __rename_if(CONCAT(v_p, 'addon_config'), CONCAT(v_p, 'common_addonconf'));
|
||
|
||
-- 字段变更:导航菜单新增 app 列(url 之后)
|
||
CALL __add_col_if_missing(
|
||
CONCAT(v_p, 'common_nav_menu'),
|
||
'app',
|
||
"varchar(30) NOT NULL DEFAULT '' COMMENT '所属应用(跨应用链接用,空=当前应用)' AFTER `url`"
|
||
);
|
||
|
||
-- 数据修复:软删除字段值为 NULL/空 的行(defaultSoftDelete=0 的表会被误过滤,导致角色/菜单查不到)
|
||
-- 幂等:已修复为 0 的行不受影响,可重复执行
|
||
SET @sql := CONCAT('UPDATE `', v_p, 'backend_role` SET `delete_at` = 0 WHERE `delete_at` IS NULL OR `delete_at` = ''''');
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END//
|
||
|
||
DELIMITER ;
|
||
|
||
CALL __migrate_table_prefix();
|
||
|
||
DROP PROCEDURE IF EXISTS `__rename_if`;
|
||
DROP PROCEDURE IF EXISTS `__add_col_if_missing`;
|
||
DROP PROCEDURE IF EXISTS `__migrate_table_prefix`;
|