fix(makecode): 达梦列注释按 OWNER 对齐,并兼容选项解析边界
同时修复新增默认 state、导出 sheet 名长度与目录权限。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+29
-5
@@ -175,7 +175,9 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
||||
tableInfo = db.Query("pragma table_info([" + v.GetString("name") + "]);")
|
||||
}
|
||||
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='` + db.DBName + `' ORDER BY c.COLUMN_ID`)
|
||||
// 必须用 ALL_COL_COMMENTS 并按 OWNER 对齐:USER_COL_COMMENTS 无 schema,
|
||||
// 在 SYSDBA 下常混入同名表空注释或读不到业务库(如 login_config)列备注。
|
||||
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 ALL_COL_COMMENTS m ON c.OWNER=m.OWNER AND c.TABLE_NAME=m.TABLE_NAME AND c.COLUMN_NAME=m.COLUMN_NAME WHERE c.TABLE_NAME='` + v.GetString("name") + `' AND c.OWNER='` + db.DBName + `' ORDER BY c.COLUMN_ID`)
|
||||
}
|
||||
|
||||
idSlice = append(idSlice, tableInfo)
|
||||
@@ -303,11 +305,33 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
||||
options := Slice{}
|
||||
comments := strings.Split(info.GetString("label"), ":")
|
||||
if len(comments) >= 2 {
|
||||
optionComment := strings.Split(comments[1], ",")
|
||||
// 截掉空格后附加说明 / {} 提示,避免污染 options 解析
|
||||
optPart := comments[1]
|
||||
if idx := strings.Index(optPart, " "); idx > -1 {
|
||||
optPart = optPart[:idx]
|
||||
}
|
||||
for _, pair := range [][2]string{{"{", "}"}, {"(", ")"}, {"(", ")"}} {
|
||||
if start := strings.Index(optPart, pair[0]); start != -1 {
|
||||
optPart = optPart[:start]
|
||||
break
|
||||
}
|
||||
}
|
||||
optionComment := strings.Split(optPart, ",")
|
||||
for _, v := range optionComment {
|
||||
optionSlice := strings.Split(v, "-")
|
||||
if len(optionSlice) >= 2 {
|
||||
options = append(options, Map{"name": optionSlice[1], "value": optionSlice[0]})
|
||||
v = strings.TrimSpace(v)
|
||||
if v == "" {
|
||||
continue
|
||||
}
|
||||
// 兼容规范「值-名称」与存量「值=名称」
|
||||
sep := -1
|
||||
for i, r := range v {
|
||||
if r == '-' || r == '=' {
|
||||
sep = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if sep > 0 && sep < len(v)-1 {
|
||||
options = append(options, Map{"name": strings.TrimSpace(v[sep+1:]), "value": strings.TrimSpace(v[:sep])})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user