diff --git a/ChaosBot/Attribute/AssemblyController.cs b/ChaosBot/Attribute/AssemblyController.cs index 27a68e5..89bdefa 100644 --- a/ChaosBot/Attribute/AssemblyController.cs +++ b/ChaosBot/Attribute/AssemblyController.cs @@ -20,86 +20,86 @@ namespace ChaosBot.Attribute { foreach (Type type in dbEntityAssembly.GetTypes()) { - if (type.GetCustomAttributes(typeof(DBEntity), true).Length > 0) + try { - // Get a reference to the attribute - DBEntity dbEntity = type.GetCustomAttributes(typeof(DBEntity)).Cast().First(); - - // Generate columns - // name, type, constraintName, constraints, - List> columnList = new List>(); - - // Get the table as an easy variable - string table = dbEntity.Table; - - // Loop through all fields - foreach (PropertyInfo prop in type.GetProperties()) + if (type.GetCustomAttributes(typeof(DBEntity), true).Length > 0) { - string columnName = prop.Name; - string columnType = DBEntity.DataTypes.GetValueOrDefault(prop.PropertyType).ToString(); - StringBuilder constraintNameBuilder = new StringBuilder($"{table}_{columnName}"); - List constraintsList = new List(); + // Get a reference to the attribute + DBEntity dbEntity = type.GetCustomAttributes(typeof(DBEntity)).Cast().First(); + + // Generate columns + // name, type, constraintName, constraints, + List> columnList = new List>(); + + // Get the table as an easy variable + string table = dbEntity.Table; - // Go through every attribute - foreach (object fieldAttribute in prop.GetCustomAttributes(true)) + // Loop through all fields + foreach (PropertyInfo prop in type.GetProperties()) { - if (fieldAttribute is DBFieldAttribute dBFieldAttribute) + string columnName = prop.Name; + string columnType = DBEntity.DataTypes.GetValueOrDefault(prop.PropertyType).ToString(); + StringBuilder constraintNameBuilder = new StringBuilder($"{table}_{columnName}"); + List constraintsList = new List(); + + // Go through every attribute + foreach (object fieldAttribute in prop.GetCustomAttributes(true)) { - string constraintSuffix = - DBEntity.ConstrainNames.GetValueOrDefault(dBFieldAttribute.GetType(), null); - if (constraintSuffix != null) + if (fieldAttribute is DBFieldAttribute dBFieldAttribute) { - constraintNameBuilder.Append($"_{constraintSuffix}"); - constraintsList.Add($"{dBFieldAttribute.GetSQLiteQuery()}"); + string constraintSuffix = + DBEntity.ConstrainNames.GetValueOrDefault(dBFieldAttribute.GetType(), null); + if (constraintSuffix != null) + { + constraintNameBuilder.Append($"_{constraintSuffix}"); + constraintsList.Add($"{dBFieldAttribute.GetSQLiteQuery()}"); + } } } - } - string constraintName = constraintNameBuilder.ToString(); - if (constraintsList.Count > 0) - { - constraintsList.Insert(0, "CONSTRAINT"); - constraintsList.Insert(1, constraintName); + string constraintName = constraintNameBuilder.ToString(); + if (constraintsList.Count > 0) + { + constraintsList.Insert(0, "CONSTRAINT"); + constraintsList.Insert(1, constraintName); + } + string constraints = String.Join(" ", constraintsList); + columnList.Add(new Tuple(columnName, columnType, constraintName, constraints)); } - string constraints = String.Join(" ", constraintsList); - columnList.Add(new Tuple(columnName, columnType, constraintName, constraints)); - } - - // Check table exists - bool tableExists = - Controller.RawQuery($"SELECT name FROM sqlite_master WHERE type='table' AND name='{table}'") - .Rows.Count > 0; + + // Check table exists + bool tableExists = + Controller.RawQuery($"SELECT name FROM sqlite_master WHERE type='table' AND name='{table}'") + .Rows.Count > 0; - try - { if (!tableExists) { string columnDefs = String.Join(", ", columnList.Select(c => $"{c.Item1} {c.Item2} {c.Item4}")); string query = $"CREATE TABLE {table} ({columnDefs})"; - Controller.RawQuery(query); - } - // // TODO: Generate this in one go instead of many separate commands - // Controller.RawQuery($"CREATE TABLE IF NOT EXISTS {table} (id INTEGER NOT NULL CONSTRAINT {table}_pk PRIMARY KEY AUTOINCREMENT)"); - // Controller.RawQuery($"CREATE UNIQUE INDEX {table}_id_uindex ON {table} (id)", false, true); - // string query = $"ALTER TABLE {table} ADD COLUMN {fieldname} {fieldType} {fieldModifiers}"; - } - catch (Exception ex) - { - if (ex is SqliteException sqliteException) - { - if (!sqliteException.Message.Contains("duplicate column name")) - { - _logger.Fatal( - $"AssemblyController.Register: Exception [{ex}] thrown, <[{ex.Message}]>."); - } + Controller.RawQuery(query, false); } else { - _logger.Error( - $"AssemblyController.Register: Exception [{ex}] thrown, <[{ex.Message}]>."); + foreach (Tuple column in columnList) + { + try + { + string query = + $"ALTER TABLE {table} ADD COLUMN {column.Item1} {column.Item2} {column.Item4}"; + Controller.RawQuery(query, false, true); + } + catch + { + // ignored + } + } } } } + catch (Exception ex) + { + _logger.Error($"AssemblyController.Register: Exception [{ex}] thrown, <[{ex.Message}]>."); + } } } }