mirror of https://github.com/cloudreve/Cloudreve
fix: deadlock while creating default user in SQLite
parent
d0779f564e
commit
0fb31f4523
2
assets
2
assets
|
@ -1 +1 @@
|
||||||
Subproject commit ac3af6097f5438d9d24afc22a9a4aacd212deb69
|
Subproject commit 0deacc2d4dea2087bf065dc2946fde1670a7fd03
|
|
@ -102,12 +102,16 @@ func (folder *Folder) GetChildFiles() ([]File, error) {
|
||||||
// GetFilesByIDs 根据文件ID批量获取文件,
|
// GetFilesByIDs 根据文件ID批量获取文件,
|
||||||
// UID为0表示忽略用户,只根据文件ID检索
|
// UID为0表示忽略用户,只根据文件ID检索
|
||||||
func GetFilesByIDs(ids []uint, uid uint) ([]File, error) {
|
func GetFilesByIDs(ids []uint, uid uint) ([]File, error) {
|
||||||
|
return GetFilesByIDsFromTX(DB, ids, uid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetFilesByIDsFromTX(tx *gorm.DB, ids []uint, uid uint) ([]File, error) {
|
||||||
var files []File
|
var files []File
|
||||||
var result *gorm.DB
|
var result *gorm.DB
|
||||||
if uid == 0 {
|
if uid == 0 {
|
||||||
result = DB.Where("id in (?)", ids).Find(&files)
|
result = tx.Where("id in (?)", ids).Find(&files)
|
||||||
} else {
|
} else {
|
||||||
result = DB.Where("id in (?) AND user_id = ?", ids, uid).Find(&files)
|
result = tx.Where("id in (?) AND user_id = ?", ids, uid).Find(&files)
|
||||||
}
|
}
|
||||||
return files, result.Error
|
return files, result.Error
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@ func IsTrueVal(val string) bool {
|
||||||
|
|
||||||
// GetSettingByName 用 Name 获取设置值
|
// GetSettingByName 用 Name 获取设置值
|
||||||
func GetSettingByName(name string) string {
|
func GetSettingByName(name string) string {
|
||||||
|
return GetSettingByNameFromTx(DB, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSettingByNameFromTx 用 Name 获取设置值,使用事务
|
||||||
|
func GetSettingByNameFromTx(tx *gorm.DB, name string) string {
|
||||||
var setting Setting
|
var setting Setting
|
||||||
|
|
||||||
// 优先从缓存中查找
|
// 优先从缓存中查找
|
||||||
|
@ -32,14 +37,19 @@ func GetSettingByName(name string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 尝试数据库中查找
|
// 尝试数据库中查找
|
||||||
if DB != nil {
|
if tx == nil {
|
||||||
result := DB.Where("name = ?", name).First(&setting)
|
tx = DB
|
||||||
if result.Error == nil {
|
if tx == nil {
|
||||||
_ = cache.Set(cacheKey, setting.Value, -1)
|
return ""
|
||||||
return setting.Value
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result := tx.Where("name = ?", name).First(&setting)
|
||||||
|
if result.Error == nil {
|
||||||
|
_ = cache.Set(cacheKey, setting.Value, -1)
|
||||||
|
return setting.Value
|
||||||
|
}
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue