b43f968b6c
- 在应用程序中新增对达梦数据库(DM)的配置和连接支持 - 实现 SetDmDB 函数以配置达梦数据库连接 - 更新数据库操作逻辑,支持达梦特有的 SQL 语法和功能 - 在相关文件中添加达梦数据库的处理逻辑,包括表创建、数据插入和查询 - 更新 go.mod 和 go.sum 文件以引入达梦数据库驱动 - 增强文档,详细说明达梦数据库的配置和使用方法
89 lines
3.0 KiB
Go
89 lines
3.0 KiB
Go
package app
|
|
|
|
import (
|
|
. "code.hoteas.com/golang/hotime"
|
|
. "code.hoteas.com/golang/hotime/common"
|
|
)
|
|
|
|
// DmdbCtr 达梦数据库特有测试控制器
|
|
var DmdbCtr = Ctr{
|
|
"tables": func(that *Context) {
|
|
if that.Db.Type != "dm" && that.Db.Type != "dameng" {
|
|
that.Display(0, Map{"skip": true, "reason": "当前非达梦数据库"})
|
|
return
|
|
}
|
|
tables := that.Db.Query(`SELECT TABLE_NAME AS "name", COMMENTS AS "label" FROM USER_TAB_COMMENTS WHERE TABLE_TYPE='TABLE'`)
|
|
that.Display(0, Map{"tables": tables})
|
|
},
|
|
|
|
"describe": func(that *Context) {
|
|
if that.Db.Type != "dm" && that.Db.Type != "dameng" {
|
|
that.Display(0, Map{"skip": true, "reason": "当前非达梦数据库"})
|
|
return
|
|
}
|
|
tableName := that.Req.FormValue("table")
|
|
if tableName == "" {
|
|
that.Display(1, "请提供 table 参数")
|
|
return
|
|
}
|
|
columns := that.Db.Query(`SELECT c.COLUMN_NAME AS "name", c.DATA_TYPE AS "type", m.COMMENTS AS "label", c.NULLABLE AS "must" FROM USER_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='` + tableName + `' ORDER BY c.COLUMN_ID`)
|
|
data := that.Db.Select(tableName, "*", Map{"LIMIT": 10})
|
|
that.Display(0, Map{"table": tableName, "columns": columns, "sample_data": data})
|
|
},
|
|
|
|
"rawsql": func(that *Context) {
|
|
if that.Db.Type != "dm" && that.Db.Type != "dameng" {
|
|
that.Display(0, Map{"skip": true, "reason": "当前非达梦数据库"})
|
|
return
|
|
}
|
|
result := testDmRawSQL(that)
|
|
that.Display(0, result)
|
|
},
|
|
}
|
|
|
|
func testDmRawSQL(that *Context) Map {
|
|
result := Map{"name": "达梦原生SQL测试", "tests": Slice{}}
|
|
tests := Slice{}
|
|
|
|
test1 := Map{"name": "Query 原生查询 (双引号)"}
|
|
articles1 := that.Db.Query(`SELECT "id", "title", "author" FROM "article" WHERE "state" = ? LIMIT ?`, 0, 5)
|
|
test1["result"] = len(articles1) >= 0
|
|
test1["count"] = len(articles1)
|
|
tests = append(tests, test1)
|
|
|
|
test2 := Map{"name": "Exec 原生执行 (双引号)"}
|
|
testArticle := that.Db.Get("article", "id", Map{"state": 0})
|
|
if testArticle != nil {
|
|
res, err := that.Db.Exec(`UPDATE "article" SET "modify_time" = NOW() WHERE "id" = ?`, testArticle.GetInt64("id"))
|
|
if err.GetError() == nil && res != nil {
|
|
affected, _ := res.RowsAffected()
|
|
test2["result"] = affected >= 0
|
|
test2["affected"] = affected
|
|
} else {
|
|
test2["result"] = false
|
|
test2["error"] = err.GetError()
|
|
}
|
|
} else {
|
|
test2["result"] = true
|
|
test2["note"] = "无可用测试数据"
|
|
}
|
|
tests = append(tests, test2)
|
|
|
|
test3 := Map{"name": "USER_TABLES 查询"}
|
|
tables := that.Db.Query(`SELECT TABLE_NAME FROM USER_TABLES`)
|
|
test3["result"] = len(tables) >= 0
|
|
test3["count"] = len(tables)
|
|
tests = append(tests, test3)
|
|
|
|
test4 := Map{"name": "USER_TAB_COLUMNS 查询"}
|
|
cols := that.Db.Query(`SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='admin' ORDER BY COLUMN_ID`)
|
|
test4["result"] = len(cols) >= 0
|
|
test4["count"] = len(cols)
|
|
test4["columns"] = cols
|
|
tests = append(tests, test4)
|
|
|
|
result["tests"] = tests
|
|
result["success"] = true
|
|
return result
|
|
}
|