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 }