-- ============================================================
-- 远程库时间字段规范化迁移 SQL
-- 作用：把曾由错误代码（createTime='create_time'）写入的
--       旧列 create_time / update_time / delete_time
--       重命名为规范列 create_at / update_at / delete_at，
--       并修正列类型/默认值/注释，与 install.sql 保持一致。
-- 覆盖表（前缀示例 wxapp_，执行前全部替换为线上真实前缀）：
--   card, help, medal, member_medal, prop, score_log,
--   shop, sms, task, member_prop, member_task, notice
-- 说明：
--   1) 旧列若不存在（线上已是新列名），自动跳过，不报错。
--   2) 新列若已存在（说明之前已改过），CHANGE 会失败——故先 DROP 旧列再 ADD 新列，
--      但为安全采用「先探测旧列是否存在」的方式。
--   3) 本脚本幂等：重复执行安全（旧列不存在时整段跳过）。
-- ============================================================

DELIMITER //

-- 通用迁移存储过程：仅当旧列存在且新列不存在时才改
DROP PROCEDURE IF EXISTS `__migrate_time_col`//
CREATE PROCEDURE `__migrate_time_col`(
  IN p_table VARCHAR(64),
  IN p_old   VARCHAR(64),
  IN p_new   VARCHAR(64),
  IN p_def   VARCHAR(255)
)
BEGIN
  IF EXISTS (
    SELECT 1 FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = p_table
      AND COLUMN_NAME = p_old
  ) AND NOT EXISTS (
    SELECT 1 FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = p_table
      AND COLUMN_NAME = p_new
  ) THEN
    SET @sql = CONCAT('ALTER TABLE `', p_table, '` CHANGE `', p_old, '` `', p_new, '` ', p_def);
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
  END IF;
END//

DROP PROCEDURE IF EXISTS `__migrate_table`//
CREATE PROCEDURE `__migrate_table`(IN p_table VARCHAR(64))
BEGIN
  -- 三列全改（按各自 install.sql 定义）
  CALL __migrate_time_col(p_table, 'create_time', 'create_at', "int(11) NOT NULL DEFAULT 0 COMMENT '创建时间'");
  CALL __migrate_time_col(p_table, 'update_time', 'update_at', "int(11) NOT NULL DEFAULT 0 COMMENT '更新时间'");
  CALL __migrate_time_col(p_table, 'delete_time', 'delete_at', "int(11) NOT NULL DEFAULT 0 COMMENT '删除时间'");
END//

DELIMITER ;

-- 逐表迁移（member_medal / member_prop / member_task 只有 create_at，无 update/delete）
CALL __migrate_table('wxapp_card');
CALL __migrate_table('wxapp_help');
CALL __migrate_table('wxapp_medal');
CALL __migrate_table('wxapp_prop');
CALL __migrate_table('wxapp_shop');
CALL __migrate_table('wxapp_sms');
CALL __migrate_table('wxapp_task');
CALL __migrate_table('wxapp_notice');
CALL __migrate_table('wxapp_score_log');

-- 仅含 create_at 的表
CALL __migrate_time_col('wxapp_member_medal', 'create_time', 'create_at', "int(11) NOT NULL DEFAULT 0 COMMENT '获得时间'");
CALL __migrate_time_col('wxapp_member_prop',  'create_time', 'create_at', "int(11) NOT NULL DEFAULT '0' COMMENT '获得时间'");
CALL __migrate_time_col('wxapp_member_task',  'create_time', 'create_at', "int(11) NOT NULL DEFAULT '0' COMMENT '领取时间'");

-- 清理临时存储过程
DROP PROCEDURE IF EXISTS `__migrate_time_col`;
DROP PROCEDURE IF EXISTS `__migrate_table`;
