update transaction funcs

This commit is contained in:
sentriz
2023-11-04 19:03:28 +00:00
parent 604f450f08
commit 27b2d36376
2 changed files with 9 additions and 5 deletions

View File

@@ -124,15 +124,19 @@ func (db *DB) Begin() *DB {
return &DB{DB: db.DB.Begin()} 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 { if len(data) == 0 {
return nil return nil
} }
// https://sqlite.org/limits.html // https://sqlite.org/limits.html
const size = 999 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 { for i := 0; i < len(data); i += size {
end := i + size end := i + size
if end > len(data) { if end > len(data) {

View File

@@ -539,7 +539,7 @@ func (s *Scanner) cleanTracks(c *Context) error {
c.tracksMissing = append(c.tracksMissing, int64(a)) 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 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)) 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 return tx.Where(chunk).Delete(&db.Album{}).Error
}) })
} }