3681564ca4
- 在 ColumnDataType 中新增对 PostgreSQL 和 Oracle 数据类型的支持 - 更新 Db2JSON 方法,优化对达梦数据库表和列信息的查询逻辑 - 增强字段备注解析,支持从备注中提取提示信息并清理标签 - 更新文档,详细说明字段备注格式及前端提示的展示效果
2.6 KiB
2.6 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 修复DM类型映射大小写 | DM 返回的列类型为大写(BIGINT、VARCHAR、INT、TIMESTAMP),但 ColumnDataType 的匹配键是小写且 strings.Contains 区分大小写,导致类型映射全部失败。 |
|
false |
修复达梦数据库列类型映射失败
问题分析
通过 MCP 查询 adminDB.json 确认:大量字段 type 仍为 DM 原始类型(BIGINT、VARCHAR、INT、TIMESTAMP、DECIMAL),未映射到框架类型(number、text、time),导致前端编辑页无法识别控件类型。
根因
config.go 第 43-59 行定义的 ColumnDataType 映射表键全部为小写:
var ColumnDataType = map[string]string{
"int": "number",
"char": "text",
"text": "text",
"time": "time",
// ...
}
makecode.go 第 191-194 行的匹配逻辑使用 strings.Contains,区分大小写:
for k, v1 := range ColumnDataType {
if strings.Contains(info.GetString("type"), k) { // "BIGINT" 不包含 "int"
info["type"] = v1
break
}
}
DM 返回的类型全部为大写(INT、VARCHAR、BIGINT),而键为小写(int、char),strings.Contains("BIGINT", "int") 返回 false,映射全部跳过。
修复方案
修改 1:类型比较忽略大小写 - makecode.go
第 192 行,将 info.GetString("type") 转为小写再匹配:
if strings.Contains(strings.ToLower(info.GetString("type")), k) {
效果验证:
"BIGINT"->"bigint"-> contains"int"->"number""VARCHAR"->"varchar"-> contains"char"->"text""INT"->"int"-> contains"int"->"number""TIMESTAMP"->"timestamp"-> contains"time"->"time""DECIMAL"->"decimal"-> contains"decimal"->"number"
修改 2:补充 DM 特有类型 - config.go
在 ColumnDataType 中追加 DM 特有的数据类型,确保 CLOB、NUMBER 等也能被识别:
var ColumnDataType = map[string]string{
// 现有 MySQL/SQLite 类型...
// DM 特有类型
"clob": "text",
"number": "number",
"numeric": "number",
"binary": "text",
"boolean": "number",
"bit": "number",
}