From b63749b94ca627339828ced60864ffb4621fb36d Mon Sep 17 00:00:00 2001 From: Giteabot Date: Tue, 28 Nov 2023 01:58:39 +0800 Subject: [PATCH] Increase "version" when update the setting value to a same value as before (#28243) (#28244) Backport #28243 Setting the same value should not trigger DuplicateKey error, and the "version" should be increased Co-authored-by: wxiaoguang (cherry picked from commit ea9f5a57e440becc71ba9430b3704ecfd7592697) --- models/system/setting.go | 2 +- models/system/setting_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/models/system/setting.go b/models/system/setting.go index 507d23cff6..cd1d373b98 100644 --- a/models/system/setting.go +++ b/models/system/setting.go @@ -81,7 +81,7 @@ func SetSettings(ctx context.Context, settings map[string]string) error { return err } for k, v := range settings { - res, err := e.Exec("UPDATE system_setting SET setting_value=? WHERE setting_key=?", v, k) + res, err := e.Exec("UPDATE system_setting SET version=version+1, setting_value=? WHERE setting_key=?", v, k) if err != nil { return err } diff --git a/models/system/setting_test.go b/models/system/setting_test.go index 4117420e5f..0316ea144d 100644 --- a/models/system/setting_test.go +++ b/models/system/setting_test.go @@ -39,4 +39,16 @@ func TestSettings(t *testing.T) { assert.EqualValues(t, 3, rev) assert.Len(t, settings, 2) assert.EqualValues(t, "false", settings[keyName]) + + // setting the same value should not trigger DuplicateKey error, and the "version" should be increased + setting := &system.Setting{SettingKey: keyName} + _, err = db.GetByBean(db.DefaultContext, setting) + assert.NoError(t, err) + assert.EqualValues(t, 2, setting.Version) + err = system.SetSettings(db.DefaultContext, map[string]string{keyName: "false"}) + assert.NoError(t, err) + setting = &system.Setting{SettingKey: keyName} + _, err = db.GetByBean(db.DefaultContext, setting) + assert.NoError(t, err) + assert.EqualValues(t, 3, setting.Version) }