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")`)
|
|||
|
|
}
|
|||
|
|
}
|