34365fdaa0
- 在 ColumnDataType 中新增对 PostgreSQL 和 Oracle 数据类型的支持 - 更新 Db2JSON 方法,优化对达梦数据库表和列信息的查询逻辑 - 增强字段备注解析,支持从备注中提取提示信息并清理标签 - 更新文档,详细说明字段备注格式及前端提示的展示效果
2.6 KiB
2.6 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 修复DM列注释读取 | 修复达梦数据库列注释(COMMENT)未被正确读取的问题,导致管理端所有字段显示为数据库字段名而非中文备注。 |
|
false |
修复达梦数据库列注释读取失败
问题分析
通过 MCP 查询 adminDB.json 确认:所有表的字段 label 全部等于字段名本身(如 "id", "name", "phone"),没有中文备注。但表级 label 正常(如"消息主表"、"用户表")。
用户确认数据库字段确实有备注。
根因
makecode.go 第 170 行当前的列查询 SQL:
FROM ALL_TAB_COLUMNS c
LEFT JOIN ALL_COL_COMMENTS m
ON c.TABLE_NAME=m.TABLE_NAME AND c.COLUMN_NAME=m.COLUMN_NAME AND c.OWNER=m.OWNER
WHERE c.TABLE_NAME='...' AND c.OWNER='ZWBG'
LEFT JOIN 条件中 c.OWNER=m.OWNER 要求 ALL_COL_COMMENTS 的 OWNER 也等于 'ZWBG'。但在 DM 中,ALL_COL_COMMENTS 的 OWNER 值可能与 ALL_TAB_COLUMNS 不一致(DM 的 Oracle 兼容视图在 OWNER 语义上可能存在差异),导致 JOIN 匹配不上,m.COMMENTS 全部为 NULL。
对比:表注释用的 ALL_TAB_COMMENTS WHERE OWNER='ZWBG' 能正确返回中文备注,说明表级视图的 OWNER 一致,但列级视图可能不同。
修复方案
修改 makecode.go 第 169-171 行,列注释改用 USER_COL_COMMENTS(自动使用当前 schema 上下文 ZWBG,无需 OWNER 过滤),列元数据继续用 ALL_TAB_COLUMNS(保留 OWNER 过滤防止系统表):
if db.Type == "dm" || db.Type == "dameng" {
tableInfo = db.Query(`SELECT c.COLUMN_NAME AS "name", c.DATA_TYPE AS "type", m.COMMENTS AS "label", c.NULLABLE AS "must", c.DATA_DEFAULT AS "dflt_value" FROM ALL_TAB_COLUMNS c LEFT JOIN USER_COL_COMMENTS m ON c.TABLE_NAME=m.TABLE_NAME AND c.COLUMN_NAME=m.COLUMN_NAME WHERE c.TABLE_NAME='` + v.GetString("name") + `' AND c.OWNER='` + strings.ToUpper(db.DBName) + `' ORDER BY c.COLUMN_ID`)
}
关键变化:
ALL_COL_COMMENTS改为USER_COL_COMMENTS- 去掉 JOIN 中的
AND c.OWNER=m.OWNER(USER_COL_COMMENTS没有 OWNER 列) - WHERE 条件
c.OWNER='ZWBG'保留(作用于ALL_TAB_COLUMNS,防止系统表列混入)
原理:框架连接 DM 用 ?schema=ZWBG,USER_COL_COMMENTS 自动返回当前 schema(ZWBG)的列注释,绕开了 OWNER 不一致问题。