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