74 lines
1.5 KiB
Go
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
|
|
}
|