This commit is contained in:
wood chen 2024-09-28 15:39:25 +08:00
parent 190155ff5b
commit bb6447e975

View File

@ -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_, &notnull, &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
}