diff --git a/db/db.go b/db/db.go index ab261aa..cbb4549 100644 --- a/db/db.go +++ b/db/db.go @@ -124,15 +124,19 @@ func (db *DB) Begin() *DB { return &DB{DB: db.DB.Begin()} } -type ChunkFunc func(*gorm.DB, []int64) error +func (db *DB) Transaction(cb func(*DB) error) error { + return db.DB.Transaction(func(tx *gorm.DB) error { + return cb(&DB{DB: tx}) + }) +} -func (db *DB) TransactionChunked(data []int64, cb ChunkFunc) error { +func (db *DB) TransactionChunked(data []int64, cb func(*DB, []int64) error) error { if len(data) == 0 { return nil } // https://sqlite.org/limits.html const size = 999 - return db.Transaction(func(tx *gorm.DB) error { + return db.Transaction(func(tx *DB) error { for i := 0; i < len(data); i += size { end := i + size if end > len(data) { diff --git a/scanner/scanner.go b/scanner/scanner.go index 24d814a..86b636b 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -539,7 +539,7 @@ func (s *Scanner) cleanTracks(c *Context) error { c.tracksMissing = append(c.tracksMissing, int64(a)) } } - return s.db.TransactionChunked(c.tracksMissing, func(tx *gorm.DB, chunk []int64) error { + return s.db.TransactionChunked(c.tracksMissing, func(tx *db.DB, chunk []int64) error { return tx.Where(chunk).Delete(&db.Track{}).Error }) } @@ -561,7 +561,7 @@ func (s *Scanner) cleanAlbums(c *Context) error { c.albumsMissing = append(c.albumsMissing, int64(a)) } } - return s.db.TransactionChunked(c.albumsMissing, func(tx *gorm.DB, chunk []int64) error { + return s.db.TransactionChunked(c.albumsMissing, func(tx *db.DB, chunk []int64) error { return tx.Where(chunk).Delete(&db.Album{}).Error }) }