fix: db SaveServer by insert-or-update

This commit is contained in:
wwt 2024-02-09 20:05:17 +08:00
parent bbe9fd8789
commit b88010b779
2 changed files with 49 additions and 8 deletions

View File

@ -94,20 +94,60 @@ func (s settingsBackend) SaveServer(ss *settings.Server) error {
return err
}
table := quoteName(s.dbType, SettingsTable)
k := quoteName(s.dbType, "key")
keyName := quoteName(s.dbType, "key")
p1 := placeHolder(s.dbType, 1)
p2 := placeHolder(s.dbType, 2)
sql := fmt.Sprintf("INSERT INTO %s (%s, value) VALUES(%s,%s)", table, k, p1, p2)
for i, field := range fields {
stmt, err := s.db.Prepare(sql)
Insert := func(key string, value string) bool {
insertSql := fmt.Sprintf("INSERT INTO %s (%s, value) VALUES(%s,%s)", table, keyName, p1, p2)
stmt, err := s.db.Prepare(insertSql)
defer stmt.Close()
if checkError(err, "Fail to prepare statement") {
tx.Rollback()
break
return false
}
_, err = stmt.Exec(field, values[i])
if checkError(err, "Fail to insert field "+field+" of settings.Server") {
_, err = stmt.Exec(key, value)
if checkError(err, "Fail to insert field "+key+" of settings.Server") {
tx.Rollback()
return false
}
return true
}
Update := func(key string, value string) bool {
updateSql := fmt.Sprintf("UPDATE %s SET value=%s WHERE %s=%s", table, p1, keyName, p2)
stmt, err := s.db.Prepare(updateSql)
defer stmt.Close()
if checkError(err, "Fail to prepare statement") {
tx.Rollback()
return false
}
_, err = stmt.Exec(value, key)
if checkError(err, "Fail to update field "+key+" of settings.Server") {
tx.Rollback()
return false
}
return true
}
Exist := func(key string) bool {
querySql := fmt.Sprintf("SELECT count(*) FROM %s WHERE %s=%s", table, keyName, p1)
row := s.db.QueryRow(querySql, key)
count := 0
err := row.Scan(&count)
if checkError(err, "Fail to Query "+key+" for GetServer") {
return false
}
return count == 1
}
InsertOrUpdate := func(key string, value string) bool {
if Exist(key) {
return Update(key, value)
} else {
return Insert(key, value)
}
}
for i, field := range fields {
if !InsertOrUpdate(field, values[i]) {
break
}
}

View File

@ -174,7 +174,8 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
}
}
if len(settings1.Key) == 0 {
return nil, nil
fmt.Println("The tables may not exist. Please run 'filebrowser config init' first")
return &settings1, nil
}
return &settings1, nil
}