-- S8-NOTIFICATION-LOG-INDEX-DDL-P2-3 — ROLLBACK
-- Target table: ado_s8_notification_log
-- Purpose: 回滚 20260531_s8_notification_log_indexes.sql 创建的 2 个二级索引。
--
-- 重要前置：
--   1. 如果 AdoS8NotificationLog.cs 实体上的 [SugarIndex] 注解仍然存在，
--      下一次 Database.json 的 TableSettings.EnableInitTable=true 启动时，
--      CodeFirst 会按注解自动重建本脚本刚 DROP 的索引；
--   2. 因此回滚 DDL 时，必须同步执行以下任一动作：
--        - 同步移除 AdoS8NotificationLog.cs 中对应的 [SugarIndex] 注解，或
--        - 在回滚期间将 Database.json 中 TableSettings.EnableInitTable 改为 false，
--      否则回滚将被 CodeFirst 自动覆盖。
--   3. 本脚本仅 DROP 二级索引，不删除任何数据行，不改字段，不改表结构，
--      不触碰其他索引（PRIMARY 与未来新增索引不受影响）。
--   4. 不执行 DML（INSERT/UPDATE/DELETE）。
--   5. 不执行 DROP TABLE / TRUNCATE / ALTER COLUMN / MODIFY COLUMN。
--
-- Idempotency:
--   MySQL 8 不支持 DROP INDEX IF EXISTS（仅 8.0.29+ 支持，且本环境未验证）。
--   如果索引已不存在，DROP 会抛 "Can't DROP ... ; check that column/key exists"，
--   属安全错误，先跑 pre-check 可避免。

-- =========================================================================
-- Pre-check (run first; expect 1 row each when index present)
-- =========================================================================

-- Pre-check A: idx_s8_notif_channel_time
SELECT COUNT(*) AS exists_channel_time
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'ado_s8_notification_log'
  AND INDEX_NAME = 'idx_s8_notif_channel_time';

-- Pre-check B: idx_s8_notif_created_at
SELECT COUNT(*) AS exists_created_at
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'ado_s8_notification_log'
  AND INDEX_NAME = 'idx_s8_notif_created_at';

-- =========================================================================
-- Index drop (run each only when its pre-check returned 1)
-- =========================================================================

-- Drop index A
DROP INDEX idx_s8_notif_channel_time ON ado_s8_notification_log;

-- Drop index B
DROP INDEX idx_s8_notif_created_at ON ado_s8_notification_log;

-- =========================================================================
-- Post-check (run after drop; expect 0 rows total)
-- =========================================================================

SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'ado_s8_notification_log'
  AND INDEX_NAME IN (
    'idx_s8_notif_channel_time',
    'idx_s8_notif_created_at'
  )
GROUP BY INDEX_NAME;
