changeset 3834:d68c6be758b6 sld-colors

Only trigger the reconfiguation functions if the values have changed.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 04 Jul 2019 18:05:08 +0200
parents 70a881045efd
children 49052775f57f
files pkg/controllers/system.go
diffstat 1 files changed, 22 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/system.go	Thu Jul 04 17:44:39 2019 +0200
+++ b/pkg/controllers/system.go	Thu Jul 04 18:05:08 2019 +0200
@@ -41,6 +41,11 @@
 SELECT config_key, config_val
 FROM sys_admin.system_config`
 
+	getConfigSQL = `
+SELECT config_val
+FROM sys_admin.system_config
+WHERE config_key = $1`
+
 	updateSettingSQL = `
 INSERT INTO sys_admin.system_config (config_key, config_val)
 VALUES ($1, $2)
@@ -187,14 +192,28 @@
 		return
 	}
 	defer setStmt.Close()
+	var getStmt *sql.Stmt
+	if getStmt, err = tx.PrepareContext(ctx, getConfigSQL); err != nil {
+		return
+	}
+	defer getStmt.Close()
 
 	reconfigure := map[string]func(){}
 
 	for key, value := range *settings {
+		var old sql.NullString
+		err = getStmt.QueryRowContext(ctx, key).Scan(&old)
+		switch {
+		case err == sql.ErrNoRows:
+			old.Valid, err = false, nil
+		case err != nil:
+			return
+		}
 
-		// XXX: Only trigger this if the value really has changed.
-		if fn := reconfigureFunc(key); fn != nil {
-			reconfigure[key] = fn
+		if !old.Valid || old.String != value {
+			if fn := reconfigureFunc(key); fn != nil {
+				reconfigure[key] = fn
+			}
 		}
 
 		if _, err = setStmt.ExecContext(ctx, key, value); err != nil {