namespace Admin.NET.Plugin.AiDOP.DataPlatform.S0Dim;
///
/// 源表的一列在 information_schema.COLUMNS 里的形态,供
/// 决定该列的 JSON 表达式。
///
/// 之所以既要 又要 :
/// MySqlConnector 的 TreatTinyAsBoolean(默认开)只对**恰好** tinyint(1) 生效,
/// 而 tinyint(1) unsigned zerofill 走整数路径 —— 两者 DATA_TYPE 同为 tinyint,
/// 只有 COLUMN_TYPE 能区分。这条差异已在 aidopdev 上用既有 raw_data 实测证实
/// (IsActive→BOOLEAN,enable_bom_version→INTEGER)。
///
/// 🔴 必须是带无参构造的可写类,不能写成 positional record(2026-09-08 实测):
/// SqlSugar 用 IDataReaderEntityBuilder.CreateBuilder 反射构造结果对象,
/// 对只有主构造函数的 record 会抛 ArgumentNullException (Parameter 'con')。
/// 该异常被 S0DimSameDbStagingLoader 吞掉后静默回退逐行路径 ——
/// 功能正确但性能优化全部失效,且日志里只有一行「判定异常」,极易被当成环境问题略过。
///
public sealed class S0DimSourceColumn
{
/// SqlSugar 反射映射所需的无参构造。
public S0DimSourceColumn() { }
/// 便于单测直接构造。
public S0DimSourceColumn(string name, string dataType, string columnType, bool isNullable)
{
Name = name;
DataType = dataType;
ColumnType = columnType;
IsNullable = isNullable;
}
/// 物理列名(原样大小写)。
public string Name { get; set; } = "";
/// information_schema.COLUMNS.DATA_TYPE,如 varchar / tinyint。
public string DataType { get; set; } = "";
/// information_schema.COLUMNS.COLUMN_TYPE,如 tinyint(1) unsigned zerofill。
public string ColumnType { get; set; } = "";
/// 是否可空。
public bool IsNullable { get; set; }
}