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