From 111c501911f0395243608200c731f034a6bec9e3 Mon Sep 17 00:00:00 2001 From: Michael Green <84688932+michael-j-green@users.noreply.github.com> Date: Sun, 11 Feb 2024 00:47:41 +1100 Subject: [PATCH] Fix for broken first run on fresh installs * Fix for broken first run on fresh installs --- gaseous-server/Classes/Config.cs | 119 ++++++++++++++++++++--------- gaseous-server/Classes/Database.cs | 5 ++ 2 files changed, 87 insertions(+), 37 deletions(-) diff --git a/gaseous-server/Classes/Config.cs b/gaseous-server/Classes/Config.cs index 83d113d..80eea28 100644 --- a/gaseous-server/Classes/Config.cs +++ b/gaseous-server/Classes/Config.cs @@ -205,18 +205,25 @@ namespace gaseous_server.Classes try { - switch ((int)dataRow["ValueType"]) + if (Database.schema_version >= 1016) { - case 0: - default: - // value is a string - AppSettings.Add(SettingName, dataRow["Value"]); - break; + switch ((int)dataRow["ValueType"]) + { + case 0: + default: + // value is a string + AppSettings.Add(SettingName, dataRow["Value"]); + break; - case 1: - // value is a datetime - AppSettings.Add(SettingName, dataRow["ValueDate"]); - break; + case 1: + // value is a datetime + AppSettings.Add(SettingName, dataRow["ValueDate"]); + break; + } + } + else + { + AppSettings.Add(SettingName, dataRow["Value"]); } } catch (InvalidCastException castEx) @@ -249,34 +256,58 @@ namespace gaseous_server.Classes } else { - - string sql = "SELECT Value, ValueDate FROM Settings WHERE Setting = @SettingName"; + string sql; Dictionary dbDict = new Dictionary { { "SettingName", SettingName } }; + DataTable dbResponse; try { Logging.Log(Logging.LogType.Debug, "Database", "Reading setting '" + SettingName + "'"); - DataTable dbResponse = db.ExecuteCMD(sql, dbDict); - Type type = typeof(T); - if (dbResponse.Rows.Count == 0) + + if (Database.schema_version >= 1016) { - // no value with that name stored - respond with the default value - SetSetting(SettingName, DefaultValue); - return DefaultValue; - } - else - { - if (type.ToString() == "System.DateTime") + sql = "SELECT Value, ValueDate FROM Settings WHERE Setting = @SettingName"; + + dbResponse = db.ExecuteCMD(sql, dbDict); + Type type = typeof(T); + if (dbResponse.Rows.Count == 0) { - AppSettings.Add(SettingName, dbResponse.Rows[0]["ValueDate"]); - return (T)dbResponse.Rows[0]["ValueDate"]; + // no value with that name stored - respond with the default value + SetSetting(SettingName, DefaultValue); + return DefaultValue; } else { - AppSettings.Add(SettingName, dbResponse.Rows[0]["Value"]); + if (type.ToString() == "System.DateTime") + { + AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["ValueDate"]); + return (T)dbResponse.Rows[0]["ValueDate"]; + } + else + { + AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["Value"]); + return (T)dbResponse.Rows[0]["Value"]; + } + } + } + else + { + sql = "SELECT Value FROM Settings WHERE Setting = @SettingName"; + + dbResponse = db.ExecuteCMD(sql, dbDict); + Type type = typeof(T); + if (dbResponse.Rows.Count == 0) + { + // no value with that name stored - respond with the default value + SetSetting(SettingName, DefaultValue); + return DefaultValue; + } + else + { + AppSettings.Add(SettingName, (T)dbResponse.Rows[0]["Value"]); return (T)dbResponse.Rows[0]["Value"]; } } @@ -317,27 +348,41 @@ namespace gaseous_server.Classes public static void SetSetting(string SettingName, T Value) { Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString); - string sql = "REPLACE INTO Settings (Setting, ValueType, Value, ValueDate) VALUES (@SettingName, @ValueType, @Value, @ValueDate)"; + string sql; Dictionary dbDict; - Type type = typeof(T); - if (type.ToString() == "System.DateTime") + + if (Database.schema_version >= 1016) { - dbDict = new Dictionary + sql = "REPLACE INTO Settings (Setting, ValueType, Value, ValueDate) VALUES (@SettingName, @ValueType, @Value, @ValueDate)"; + Type type = typeof(T); + if (type.ToString() == "System.DateTime") { - { "SettingName", SettingName }, - { "ValueType", 1 }, - { "Value", null }, - { "ValueDate", Value } - }; + dbDict = new Dictionary + { + { "SettingName", SettingName }, + { "ValueType", 1 }, + { "Value", null }, + { "ValueDate", Value } + }; + } + else + { + dbDict = new Dictionary + { + { "SettingName", SettingName }, + { "ValueType", 0 }, + { "Value", Value }, + { "ValueDate", null } + }; + } } else { + sql = "REPLACE INTO Settings (Setting, Value) VALUES (@SettingName, @Value)"; dbDict = new Dictionary { { "SettingName", SettingName }, - { "ValueType", 0 }, - { "Value", Value }, - { "ValueDate", null } + { "Value", Value } }; } diff --git a/gaseous-server/Classes/Database.cs b/gaseous-server/Classes/Database.cs index 80c505b..dcf44c5 100644 --- a/gaseous-server/Classes/Database.cs +++ b/gaseous-server/Classes/Database.cs @@ -9,6 +9,8 @@ namespace gaseous_server.Classes { public class Database { + public static int schema_version = 0; + public Database() { @@ -123,6 +125,9 @@ namespace gaseous_server.Classes // run post-upgrade code DatabaseMigration.PostUpgradeScript(i, _ConnectorType); + + // update schema version variable + Database.schema_version = i; } catch (Exception ex) {