-- 1.0.328.sql  S0：NbrTypeMaster.tenant_id → BIGINT NOT NULL（幂等 + 前置断言，绝不自动回填）。
--   背景：NbrTypeMaster 实体 AdoS0NbrTypeMaster 带 [IgnoreTable]，CodeFirst 不管理其结构 → DDL 层的 NOT NULL 可持久（重启不被还原，已两次重启实证）。
--         现状 141 行（797:70 / 824:71），tenant_id 全真实租户、0 NULL、0 zero、0 system → 可安全硬化。
--   仅操作 NbrTypeMaster 一张表；不插入/更新/删除任何业务数据；不加任何 DEFAULT。
--   与 S0 收尾小批同批：ItemOpCondition / ItemSubstituteDetail 匿名写 tenant=0 P0 收口（纯 Controller，无 DDL）。
-- ============================================================================

-- 一、确认 tenant_id 列存在（缺列则全脚本 no-op）
SET @has_col := (SELECT COUNT(*) FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'NbrTypeMaster' AND COLUMN_NAME = 'tenant_id');

-- 二、前置数据断言：存在 NULL 或 0 则中止（SIGNAL），绝不自动 UPDATE / 猜测 tenant
SET @bad := IF(@has_col > 0,
    (SELECT COUNT(*) FROM NbrTypeMaster WHERE tenant_id IS NULL OR tenant_id = 0), 0);
SELECT @bad AS nbrtype_null_or_zero;   -- 期望 0
SET @sql := IF(@has_col > 0 AND @bad > 0,
    "SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'NbrTypeMaster has NULL/0 tenant_id — abort NOT NULL hardening'",
    'DO 0');
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;

-- 三、幂等 MODIFY NOT NULL（仅当列存在、数据干净、且当前仍 nullable 时执行）
SET @is_nullable := (SELECT IS_NULLABLE FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'NbrTypeMaster' AND COLUMN_NAME = 'tenant_id');
SET @sql := IF(@has_col > 0 AND @bad = 0 AND @is_nullable = 'YES',
    'ALTER TABLE NbrTypeMaster MODIFY COLUMN tenant_id BIGINT NOT NULL',
    'DO 0');
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;

-- 四、剥离任何遗留 DEFAULT（保证最终态无 DEFAULT 0 / DEFAULT system）
SET @has_default := (SELECT COUNT(*) FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'NbrTypeMaster' AND COLUMN_NAME = 'tenant_id'
      AND COLUMN_DEFAULT IS NOT NULL);
SET @sql := IF(@has_default > 0, 'ALTER TABLE NbrTypeMaster ALTER COLUMN tenant_id DROP DEFAULT', 'DO 0');
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;

-- 五、执行后验证
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'NbrTypeMaster' AND COLUMN_NAME = 'tenant_id';
-- 期望：tenant_id bigint / IS_NULLABLE = NO / COLUMN_DEFAULT = NULL。

-- ============================================================================
-- 回滚 SQL（如需恢复可空，仅在确认无写入依赖非空时执行）：
--   ALTER TABLE NbrTypeMaster MODIFY COLUMN tenant_id BIGINT NULL;
-- ============================================================================
