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