update transaction funcs
This commit is contained in:
10
db/db.go
10
db/db.go
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user