mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 05:42:06 +08:00
fix
This commit is contained in:
parent
d496c9924a
commit
fc7744b28a
@ -4,6 +4,7 @@ package core
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -45,12 +46,12 @@ func NewDatabase() (*Database, error) {
|
||||
func (d *Database) createTables() error {
|
||||
queries := []string{
|
||||
`CREATE TABLE IF NOT EXISTS keywords (
|
||||
id INTEGER PRIMARY KEY,
|
||||
keyword TEXT UNIQUE,
|
||||
is_link BOOLEAN DEFAULT FALSE,
|
||||
is_auto_added BOOLEAN DEFAULT FALSE,
|
||||
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)`,
|
||||
id INTEGER PRIMARY KEY,
|
||||
keyword TEXT UNIQUE,
|
||||
is_link BOOLEAN DEFAULT FALSE,
|
||||
is_auto_added BOOLEAN DEFAULT FALSE,
|
||||
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_keyword ON keywords(keyword)`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_added_at ON keywords(added_at)`,
|
||||
`CREATE TABLE IF NOT EXISTS whitelist (
|
||||
@ -71,10 +72,11 @@ func (d *Database) createTables() error {
|
||||
for _, query := range queries {
|
||||
_, err := d.db.Exec(query)
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("执行查询失败 '%s': %v", query, err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("所有必要的表都已创建")
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -461,17 +463,20 @@ func contains(slice []string, str string) bool {
|
||||
func (d *Database) EnsureTablesExist() error {
|
||||
tables := []string{"keywords", "whitelist", "prompt_replies", "config"}
|
||||
for _, table := range tables {
|
||||
var exists bool
|
||||
err := d.db.QueryRow("SELECT name FROM sqlite_master WHERE type='table' AND name=?", table).Scan(&exists)
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
return err
|
||||
}
|
||||
if !exists {
|
||||
if err := d.createTables(); err != nil {
|
||||
return err
|
||||
var name string
|
||||
err := d.db.QueryRow("SELECT name FROM sqlite_master WHERE type='table' AND name=?", table).Scan(&name)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
// 表不存在,创建所有表
|
||||
if err := d.createTables(); err != nil {
|
||||
return fmt.Errorf("创建表失败: %v", err)
|
||||
}
|
||||
log.Printf("创建了缺失的表: %s", table)
|
||||
return nil // 所有表都已创建,无需继续检查
|
||||
}
|
||||
break
|
||||
return fmt.Errorf("检查表 %s 是否存在时出错: %v", table, err)
|
||||
}
|
||||
log.Printf("表 %s 已存在", table)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
11
core/init.go
11
core/init.go
@ -45,10 +45,9 @@ func Init() error {
|
||||
return fmt.Errorf("初始化数据库失败: %v", err)
|
||||
}
|
||||
|
||||
// 确保表已创建
|
||||
err = DB.createTables()
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建数据库表失败: %v", err)
|
||||
// 确保所有必要的表都存在
|
||||
if err := DB.EnsureTablesExist(); err != nil {
|
||||
return fmt.Errorf("确保数据库表存在失败: %v", err)
|
||||
}
|
||||
|
||||
// 执行数据迁移
|
||||
@ -57,10 +56,6 @@ func Init() error {
|
||||
return fmt.Errorf("迁移现有关键词失败: %v", err)
|
||||
}
|
||||
|
||||
if err := DB.EnsureTablesExist(); err != nil {
|
||||
return fmt.Errorf("确保数据库表存在失败: %v", err)
|
||||
}
|
||||
|
||||
// 从环境变量中读取调试模式设置
|
||||
DEBUG_MODE = os.Getenv("DEBUG_MODE") == "true"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user