feat(db): 添加对达梦数据库的支持
- 在应用程序中新增对达梦数据库(DM)的配置和连接支持 - 实现 SetDmDB 函数以配置达梦数据库连接 - 更新数据库操作逻辑,支持达梦特有的 SQL 语法和功能 - 在相关文件中添加达梦数据库的处理逻辑,包括表创建、数据插入和查询 - 更新 go.mod 和 go.sum 文件以引入达梦数据库驱动 - 增强文档,详细说明达梦数据库的配置和使用方法
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
. "code.hoteas.com/golang/hotime/db"
|
||||
)
|
||||
|
||||
// SetupMySQLDatabase 为 MySQL 数据库创建测试表并灌入测试数据
|
||||
func SetupMySQLDatabase(db *HoTimeDB) {
|
||||
if db.Type != "mysql" {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("[MySQL Setup] 开始初始化 MySQL 数据库测试环境...")
|
||||
|
||||
prefix := db.GetPrefix()
|
||||
createMySQLTables(db, prefix)
|
||||
seedTestData(db, "MySQL")
|
||||
|
||||
fmt.Println("[MySQL Setup] MySQL 数据库测试环境初始化完成")
|
||||
}
|
||||
|
||||
func mysqlTableExists(db *HoTimeDB, tableName string) bool {
|
||||
rows := db.Query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?", tableName)
|
||||
return len(rows) > 0
|
||||
}
|
||||
|
||||
func createMySQLTables(db *HoTimeDB, prefix string) {
|
||||
// admin 表
|
||||
tbl := prefix + "admin"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`name` varchar(100) DEFAULT NULL," +
|
||||
"`phone` varchar(20) DEFAULT NULL," +
|
||||
"`state` int(2) DEFAULT '0'," +
|
||||
"`password` varchar(100) DEFAULT NULL," +
|
||||
"`role_id` int(11) DEFAULT '0'," +
|
||||
"`title` varchar(100) DEFAULT NULL," +
|
||||
"`create_time` datetime DEFAULT NULL," +
|
||||
"`modify_time` datetime DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)," +
|
||||
"UNIQUE KEY `uk_phone` (`phone`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
|
||||
// ctg 分类表
|
||||
tbl = prefix + "ctg"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`name` varchar(100) DEFAULT NULL," +
|
||||
"`state` int(2) DEFAULT '0'," +
|
||||
"`create_time` datetime DEFAULT NULL," +
|
||||
"`modify_time` datetime DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
|
||||
// article 文章表
|
||||
tbl = prefix + "article"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`title` varchar(200) DEFAULT NULL," +
|
||||
"`author` varchar(100) DEFAULT NULL," +
|
||||
"`content` text," +
|
||||
"`state` int(2) DEFAULT '0'," +
|
||||
"`click_num` int(11) DEFAULT '0'," +
|
||||
"`sort` int(11) DEFAULT '0'," +
|
||||
"`img` varchar(500) DEFAULT NULL," +
|
||||
"`ctg_id` int(11) DEFAULT '0'," +
|
||||
"`admin_id` int(11) DEFAULT '0'," +
|
||||
"`create_time` datetime DEFAULT NULL," +
|
||||
"`modify_time` datetime DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)," +
|
||||
"KEY `idx_state` (`state`)," +
|
||||
"KEY `idx_ctg_id` (`ctg_id`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
|
||||
// test_batch 测试批量表
|
||||
tbl = prefix + "test_batch"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`name` varchar(100) DEFAULT NULL," +
|
||||
"`title` varchar(200) DEFAULT NULL," +
|
||||
"`state` int(2) DEFAULT '0'," +
|
||||
"`create_time` datetime DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
|
||||
// cached 老版本缓存表(兼容模式测试需要)
|
||||
tbl = prefix + "cached"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`key` varchar(64) DEFAULT NULL," +
|
||||
"`value` text," +
|
||||
"`endtime` bigint(20) DEFAULT NULL," +
|
||||
"`time` bigint(20) DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
|
||||
// hotime_cache 新版缓存表
|
||||
tbl = prefix + "hotime_cache"
|
||||
if !mysqlTableExists(db, tbl) {
|
||||
fmt.Println("[MySQL Setup] 创建表:", tbl)
|
||||
db.Exec("CREATE TABLE `" + tbl + "` (" +
|
||||
"`id` int(11) unsigned NOT NULL AUTO_INCREMENT," +
|
||||
"`key` varchar(64) NOT NULL," +
|
||||
"`value` text," +
|
||||
"`end_time` datetime DEFAULT NULL," +
|
||||
"`state` int(2) DEFAULT '0'," +
|
||||
"`create_time` datetime DEFAULT NULL," +
|
||||
"`modify_time` datetime DEFAULT NULL," +
|
||||
"PRIMARY KEY (`id`)," +
|
||||
"UNIQUE KEY `uk_key` (`key`)," +
|
||||
"KEY `idx_end_time` (`end_time`)" +
|
||||
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user