This commit is contained in:
wood chen 2024-09-28 15:34:52 +08:00
parent 20594715d2
commit 8661f5c774

View File

@ -43,15 +43,15 @@ func NewDatabase() (*Database, error) {
func (d *Database) createTables() error { func (d *Database) createTables() error {
queries := []string{ queries := []string{
`CREATE TABLE IF NOT EXISTS keywords ( `CREATE TABLE IF NOT EXISTS keywords_new (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
keyword TEXT UNIQUE, keyword TEXT UNIQUE,
is_link BOOLEAN DEFAULT FALSE, is_link BOOLEAN DEFAULT FALSE,
is_auto_added BOOLEAN DEFAULT FALSE, is_auto_added BOOLEAN DEFAULT FALSE,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)`, )`,
`CREATE INDEX IF NOT EXISTS idx_keyword ON keywords(keyword)`, `CREATE INDEX IF NOT EXISTS idx_keyword ON keywords_new(keyword)`,
`CREATE INDEX IF NOT EXISTS idx_added_at ON keywords(added_at)`, `CREATE INDEX IF NOT EXISTS idx_added_at ON keywords_new(added_at)`,
`CREATE TABLE IF NOT EXISTS whitelist ( `CREATE TABLE IF NOT EXISTS whitelist (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
domain TEXT UNIQUE domain TEXT UNIQUE
@ -370,55 +370,36 @@ func (d *Database) MigrateExistingKeywords() error {
} }
// 检查旧表是否存在 // 检查旧表是否存在
var tableExists bool var oldTableExists bool
err = d.db.QueryRow("SELECT name FROM sqlite_master WHERE type='table' AND name='keywords'").Scan(&tableExists) err = d.db.QueryRow("SELECT name FROM sqlite_master WHERE type='table' AND name='keywords'").Scan(&oldTableExists)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return err return err
} }
if tableExists { if oldTableExists {
// 检查 added_at 列是否存在 // 迁移数据
var columnExists bool _, err = d.db.Exec(`INSERT OR IGNORE INTO keywords_new (keyword, is_link, is_auto_added, added_at)
err = d.db.QueryRow("SELECT 1 FROM pragma_table_info('keywords') WHERE name='added_at'").Scan(&columnExists) SELECT keyword,
if err != nil && err != sql.ErrNoRows { COALESCE(is_link, FALSE),
COALESCE(is_auto_added, FALSE),
COALESCE(added_at, CURRENT_TIMESTAMP)
FROM keywords`)
if err != nil {
return err return err
} }
if !columnExists { // 删除旧表
// 如果 added_at 列不存在,添加它 _, err = d.db.Exec("DROP TABLE keywords")
_, err = d.db.Exec("ALTER TABLE keywords ADD COLUMN added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
if err != nil { if err != nil {
return err return err
} }
} }
// 检查 is_link 和 is_auto_added 列是否存在 // 重命名新表
err = d.db.QueryRow("SELECT 1 FROM pragma_table_info('keywords') WHERE name='is_link'").Scan(&columnExists) _, err = d.db.Exec("ALTER TABLE keywords_new RENAME TO keywords")
if err != nil && err != sql.ErrNoRows {
return err
}
if !columnExists {
// 如果 is_link 列不存在,添加它
_, err = d.db.Exec("ALTER TABLE keywords ADD COLUMN is_link BOOLEAN DEFAULT FALSE")
if err != nil { if err != nil {
return err return err
} }
}
err = d.db.QueryRow("SELECT 1 FROM pragma_table_info('keywords') WHERE name='is_auto_added'").Scan(&columnExists)
if err != nil && err != sql.ErrNoRows {
return err
}
if !columnExists {
// 如果 is_auto_added 列不存在,添加它
_, err = d.db.Exec("ALTER TABLE keywords ADD COLUMN is_auto_added BOOLEAN DEFAULT FALSE")
if err != nil {
return err
}
}
}
// 更新配置,标记迁移已完成 // 更新配置,标记迁移已完成
_, err = d.db.Exec("INSERT OR REPLACE INTO config (key, value) VALUES ('keywords_migrated', 'true')") _, err = d.db.Exec("INSERT OR REPLACE INTO config (key, value) VALUES ('keywords_migrated', 'true')")