mirror of
https://github.com/woodchen-ink/Q58Bot.git
synced 2025-07-18 05:42:06 +08:00
修复
This commit is contained in:
parent
190155ff5b
commit
bb6447e975
@ -3,6 +3,7 @@ package core
|
||||
//数据库处理
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -377,13 +378,46 @@ func (d *Database) MigrateExistingKeywords() error {
|
||||
}
|
||||
|
||||
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)
|
||||
} else {
|
||||
selectColumns = append(selectColumns, "FALSE")
|
||||
}
|
||||
}
|
||||
|
||||
// 迁移数据
|
||||
_, err = d.db.Exec(`INSERT OR IGNORE INTO keywords_new (keyword, is_link, is_auto_added, added_at)
|
||||
SELECT keyword,
|
||||
COALESCE(is_link, FALSE),
|
||||
COALESCE(is_auto_added, FALSE),
|
||||
COALESCE(added_at, CURRENT_TIMESTAMP)
|
||||
FROM keywords`)
|
||||
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
|
||||
}
|
||||
@ -409,3 +443,13 @@ func (d *Database) MigrateExistingKeywords() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 辅助函数:检查切片中是否包含特定字符串
|
||||
func contains(slice []string, str string) bool {
|
||||
for _, v := range slice {
|
||||
if v == str {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user