2026-03-20 10:46:51 +08:00
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" ))
2026-04-13 00:38:50 +08:00
if err == nil && res != nil {
2026-03-20 10:46:51 +08:00
affected , _ := res . RowsAffected ()
test2 [ "result" ] = affected >= 0
test2 [ "affected" ] = affected
} else {
test2 [ "result" ] = false
2026-04-13 00:38:50 +08:00
test2 [ "error" ] = err
2026-03-20 10:46:51 +08:00
}
} 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
}