b43f968b6c
- 在应用程序中新增对达梦数据库(DM)的配置和连接支持 - 实现 SetDmDB 函数以配置达梦数据库连接 - 更新数据库操作逻辑,支持达梦特有的 SQL 语法和功能 - 在相关文件中添加达梦数据库的处理逻辑,包括表创建、数据插入和查询 - 更新 go.mod 和 go.sum 文件以引入达梦数据库驱动 - 增强文档,详细说明达梦数据库的配置和使用方法
127 lines
3.5 KiB
Go
127 lines
3.5 KiB
Go
package app
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
. "code.hoteas.com/golang/hotime/db"
|
||
)
|
||
|
||
// SetupDMDatabase 为达梦数据库创建测试表并灌入测试数据
|
||
func SetupDMDatabase(db *HoTimeDB) {
|
||
if db.Type != "dm" && db.Type != "dameng" {
|
||
return
|
||
}
|
||
|
||
fmt.Println("[DM Setup] 开始初始化达梦数据库测试环境...")
|
||
|
||
prefix := db.GetPrefix()
|
||
createDMTables(db, prefix)
|
||
seedTestData(db, "DM")
|
||
|
||
fmt.Println("[DM Setup] 达梦数据库测试环境初始化完成")
|
||
}
|
||
|
||
func dmTableExists(db *HoTimeDB, tableName string) bool {
|
||
// COUNT(*) 即使表为空也会返回一行;若表不存在则报错返回空切片。
|
||
// 相比 USER_TABLES,这里直接检测当前 schema 下表的可访问性,避免
|
||
// 连接 schema(?schema=TEST)与 USER_TABLES(SYSDBA 自身 schema)错配。
|
||
res := db.Query(`SELECT COUNT(*) as cnt FROM "` + tableName + `"`)
|
||
return len(res) > 0
|
||
}
|
||
|
||
func createDMTables(db *HoTimeDB, prefix string) {
|
||
// admin 表
|
||
tbl := prefix + "admin"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"name" VARCHAR(100),
|
||
"phone" VARCHAR(20),
|
||
"state" INT DEFAULT 0,
|
||
"password" VARCHAR(100),
|
||
"role_id" INT DEFAULT 0,
|
||
"title" VARCHAR(100),
|
||
"create_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
"modify_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
)`)
|
||
db.Exec(`CREATE UNIQUE INDEX "uk_` + tbl + `_phone" ON "` + tbl + `" ("phone")`)
|
||
}
|
||
|
||
// ctg 分类表
|
||
tbl = prefix + "ctg"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"name" VARCHAR(100),
|
||
"state" INT DEFAULT 0,
|
||
"create_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
"modify_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
)`)
|
||
}
|
||
|
||
// article 文章表
|
||
tbl = prefix + "article"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"title" VARCHAR(200),
|
||
"author" VARCHAR(100),
|
||
"content" CLOB,
|
||
"state" INT DEFAULT 0,
|
||
"click_num" INT DEFAULT 0,
|
||
"sort" INT DEFAULT 0,
|
||
"img" VARCHAR(500),
|
||
"ctg_id" INT DEFAULT 0,
|
||
"admin_id" INT DEFAULT 0,
|
||
"create_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
"modify_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
)`)
|
||
}
|
||
|
||
// test_batch 测试批量表
|
||
tbl = prefix + "test_batch"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"name" VARCHAR(100),
|
||
"title" VARCHAR(200),
|
||
"state" INT DEFAULT 0,
|
||
"create_time" TIMESTAMP
|
||
)`)
|
||
}
|
||
|
||
// cached 老版本缓存表(兼容模式测试需要)
|
||
tbl = prefix + "cached"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"key" VARCHAR(64),
|
||
"value" CLOB,
|
||
"endtime" BIGINT,
|
||
"time" BIGINT
|
||
)`)
|
||
}
|
||
|
||
// hotime_cache 新版缓存表
|
||
tbl = prefix + "hotime_cache"
|
||
if !dmTableExists(db, tbl) {
|
||
fmt.Println("[DM Setup] 创建表:", tbl)
|
||
db.Exec(`CREATE TABLE "` + tbl + `" (
|
||
"id" INT IDENTITY(1,1) PRIMARY KEY,
|
||
"key" VARCHAR(64) NOT NULL,
|
||
"value" TEXT,
|
||
"end_time" TIMESTAMP,
|
||
"state" INT DEFAULT 0,
|
||
"create_time" TIMESTAMP,
|
||
"modify_time" TIMESTAMP,
|
||
CONSTRAINT "uk_` + tbl + `_key" UNIQUE ("key")
|
||
)`)
|
||
db.Exec(`CREATE INDEX "idx_` + tbl + `_end_time" ON "` + tbl + `" ("end_time")`)
|
||
}
|
||
}
|