mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 05:42:06 +08:00
删除迁移数据库代码
This commit is contained in:
parent
fc7744b28a
commit
112c024bd2
125
core/database.go
125
core/database.go
@ -344,122 +344,6 @@ func (d *Database) Close() error {
|
||||
return d.db.Close()
|
||||
}
|
||||
|
||||
// 迁移现有关键词
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
func (d *Database) MigrateExistingKeywords() error {
|
||||
// 检查是否已经执行过迁移
|
||||
var migrationDone string
|
||||
err := d.db.QueryRow("SELECT value FROM config WHERE key = 'keywords_migrated'").Scan(&migrationDone)
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
return err
|
||||
}
|
||||
|
||||
if migrationDone == "true" {
|
||||
return nil // 迁移已经完成,无需再次执行
|
||||
}
|
||||
|
||||
// 检查旧表是否存在
|
||||
var oldTableName string
|
||||
err = d.db.QueryRow("SELECT name FROM sqlite_master WHERE type='table' AND name='keywords'").Scan(&oldTableName)
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
return err
|
||||
}
|
||||
|
||||
if oldTableName == "keywords" {
|
||||
// 获取旧表的列信息
|
||||
rows, err := d.db.Query("PRAGMA table_info(keywords)")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var columns []string
|
||||
for rows.Next() {
|
||||
var cid int
|
||||
var name, type_ string
|
||||
var notnull, pk int
|
||||
var dflt_value interface{}
|
||||
err = rows.Scan(&cid, &name, &type_, ¬null, &dflt_value, &pk)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
columns = append(columns, name)
|
||||
}
|
||||
|
||||
// 构建插入语句
|
||||
insertColumns := []string{"keyword"}
|
||||
selectColumns := []string{"keyword"}
|
||||
for _, col := range []string{"is_link", "is_auto_added", "added_at"} {
|
||||
if contains(columns, col) {
|
||||
insertColumns = append(insertColumns, col)
|
||||
selectColumns = append(selectColumns, col)
|
||||
}
|
||||
}
|
||||
|
||||
// 迁移数据
|
||||
query := fmt.Sprintf(`INSERT OR IGNORE INTO keywords_new (%s)
|
||||
SELECT %s
|
||||
FROM keywords`,
|
||||
strings.Join(insertColumns, ", "),
|
||||
strings.Join(selectColumns, ", "))
|
||||
|
||||
_, err = d.db.Exec(query)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 删除旧表
|
||||
_, err = d.db.Exec("DROP TABLE keywords")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
// 如果旧表不存在,创建一个空的新表
|
||||
_, err = d.db.Exec(`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
|
||||
)`)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 更新配置,标记迁移已完成
|
||||
_, err = d.db.Exec("INSERT OR REPLACE INTO config (key, value) VALUES ('keywords_migrated', 'true')")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 辅助函数:检查切片中是否包含特定字符串
|
||||
func contains(slice []string, str string) bool {
|
||||
for _, v := range slice {
|
||||
if v == str {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (d *Database) EnsureTablesExist() error {
|
||||
tables := []string{"keywords", "whitelist", "prompt_replies", "config"}
|
||||
for _, table := range tables {
|
||||
@ -480,3 +364,12 @@ func (d *Database) EnsureTablesExist() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Database) CountRecords(tableName string) (int, error) {
|
||||
var count int
|
||||
err := d.db.QueryRow(fmt.Sprintf("SELECT COUNT(*) FROM %s", tableName)).Scan(&count)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
15
core/init.go
15
core/init.go
@ -50,10 +50,19 @@ func Init() error {
|
||||
return fmt.Errorf("确保数据库表存在失败: %v", err)
|
||||
}
|
||||
|
||||
// 执行数据迁移
|
||||
err = DB.MigrateExistingKeywords()
|
||||
// 检查并报告表中的记录数
|
||||
keywordCount, err := DB.CountRecords("keywords")
|
||||
if err != nil {
|
||||
return fmt.Errorf("迁移现有关键词失败: %v", err)
|
||||
log.Printf("检查 keywords 表记录数时出错: %v", err)
|
||||
} else {
|
||||
log.Printf("keywords 表中有 %d 条记录", keywordCount)
|
||||
}
|
||||
|
||||
whitelistCount, err := DB.CountRecords("whitelist")
|
||||
if err != nil {
|
||||
log.Printf("检查 whitelist 表记录数时出错: %v", err)
|
||||
} else {
|
||||
log.Printf("whitelist 表中有 %d 条记录", whitelistCount)
|
||||
}
|
||||
|
||||
// 从环境变量中读取调试模式设置
|
||||
|
Loading…
x
Reference in New Issue
Block a user