Files
butterfliu/migrations/004_add_incremental_scan_fields.go
lzw-723 79d47c81e7
All checks were successful
Go CI / test-and-build (push) Successful in 13s
Web CI / lint-test-build (push) Successful in 31s
实现增量扫描
2026-04-11 14:38:23 +08:00

74 lines
1.5 KiB
Go

package migrations
import (
"database/sql"
)
func init() {
RegisterMigration(
4,
"Add incremental scan fields",
migrateAddIncrementalScanFieldsUp,
migrateAddIncrementalScanFieldsDown,
)
}
func migrateAddIncrementalScanFieldsUp(tx *sql.Tx) error {
_, err := tx.Exec(`
ALTER TABLE media_files ADD COLUMN file_mtime_ns INTEGER DEFAULT 0
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE media_files ADD COLUMN last_seen_at TIMESTAMP
`)
if err != nil {
return err
}
return nil
}
func migrateAddIncrementalScanFieldsDown(tx *sql.Tx) error {
_, err := tx.Exec(`
CREATE TABLE media_files_old (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL,
library_id INTEGER NOT NULL,
file_size INTEGER DEFAULT 0,
format TEXT DEFAULT '',
bit_rate INTEGER DEFAULT 0,
sample_rate INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (library_id) REFERENCES libraries(id) ON DELETE CASCADE
)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
INSERT INTO media_files_old (id, path, library_id, file_size, format, bit_rate, sample_rate, created_at, updated_at)
SELECT id, path, library_id, file_size, format, bit_rate, sample_rate, created_at, updated_at
FROM media_files
`)
if err != nil {
return err
}
_, err = tx.Exec("DROP TABLE media_files")
if err != nil {
return err
}
_, err = tx.Exec("ALTER TABLE media_files_old RENAME TO media_files")
if err != nil {
return err
}
return nil
}