fix: db SaveServer by insert-or-update
This commit is contained in:
parent
bbe9fd8789
commit
b88010b779
@ -94,20 +94,60 @@ func (s settingsBackend) SaveServer(ss *settings.Server) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
table := quoteName(s.dbType, SettingsTable)
|
table := quoteName(s.dbType, SettingsTable)
|
||||||
k := quoteName(s.dbType, "key")
|
keyName := quoteName(s.dbType, "key")
|
||||||
p1 := placeHolder(s.dbType, 1)
|
p1 := placeHolder(s.dbType, 1)
|
||||||
p2 := placeHolder(s.dbType, 2)
|
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 {
|
Insert := func(key string, value string) bool {
|
||||||
stmt, err := s.db.Prepare(sql)
|
insertSql := fmt.Sprintf("INSERT INTO %s (%s, value) VALUES(%s,%s)", table, keyName, p1, p2)
|
||||||
|
stmt, err := s.db.Prepare(insertSql)
|
||||||
defer stmt.Close()
|
defer stmt.Close()
|
||||||
if checkError(err, "Fail to prepare statement") {
|
if checkError(err, "Fail to prepare statement") {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
break
|
return false
|
||||||
}
|
}
|
||||||
_, err = stmt.Exec(field, values[i])
|
_, err = stmt.Exec(key, value)
|
||||||
if checkError(err, "Fail to insert field "+field+" of settings.Server") {
|
if checkError(err, "Fail to insert field "+key+" of settings.Server") {
|
||||||
tx.Rollback()
|
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
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -174,7 +174,8 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(settings1.Key) == 0 {
|
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
|
return &settings1, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user