diff --git a/TShockAPI/DB/BanManager.cs b/TShockAPI/DB/BanManager.cs old mode 100644 new mode 100755 index 89a62c99..3fa732dd --- a/TShockAPI/DB/BanManager.cs +++ b/TShockAPI/DB/BanManager.cs @@ -46,7 +46,7 @@ namespace TShockAPI.DB : new MysqlQueryCreator()); try { - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } catch (DllNotFoundException) { diff --git a/TShockAPI/DB/CharacterManager.cs b/TShockAPI/DB/CharacterManager.cs index a1f6b5b2..861baeeb 100755 --- a/TShockAPI/DB/CharacterManager.cs +++ b/TShockAPI/DB/CharacterManager.cs @@ -57,7 +57,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } public PlayerData GetPlayerData(TSPlayer player, int acctid) diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs old mode 100644 new mode 100755 index 41c96534..2021ff25 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -47,7 +47,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - if (creator.EnsureExists(table)) + if (creator.EnsureTableStructure(table)) { // Add default groups if they don't exist AddDefaultGroup("guest", "", diff --git a/TShockAPI/DB/ItemManager.cs b/TShockAPI/DB/ItemManager.cs old mode 100644 new mode 100755 index 141f2925..51f793b1 --- a/TShockAPI/DB/ItemManager.cs +++ b/TShockAPI/DB/ItemManager.cs @@ -41,7 +41,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); UpdateItemBans(); } diff --git a/TShockAPI/DB/ProjectileManager.cs b/TShockAPI/DB/ProjectileManager.cs old mode 100644 new mode 100755 index a9cbf31b..f2ceed1c --- a/TShockAPI/DB/ProjectileManager.cs +++ b/TShockAPI/DB/ProjectileManager.cs @@ -41,7 +41,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); UpdateBans(); } diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs old mode 100644 new mode 100755 index 40e9b957..1128a3ae --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -55,7 +55,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } /// diff --git a/TShockAPI/DB/RememberedPosManager.cs b/TShockAPI/DB/RememberedPosManager.cs old mode 100644 new mode 100755 index ad2d62e2..48003e4b --- a/TShockAPI/DB/RememberedPosManager.cs +++ b/TShockAPI/DB/RememberedPosManager.cs @@ -42,7 +42,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } public Vector2 CheckLeavePos(string name) diff --git a/TShockAPI/DB/SqlTable.cs b/TShockAPI/DB/SqlTable.cs old mode 100644 new mode 100755 index b7a77b91..96c9e1d2 --- a/TShockAPI/DB/SqlTable.cs +++ b/TShockAPI/DB/SqlTable.cs @@ -53,7 +53,7 @@ namespace TShockAPI.DB } // Returns true if the table was created; false if it was not. - public bool EnsureExists(SqlTable table) + public bool EnsureTableStructure(SqlTable table) { var columns = GetColumns(table); if (columns.Count > 0) @@ -72,6 +72,28 @@ namespace TShockAPI.DB return false; } + /// + /// Ensures a table exists and that its structure is correct + /// + /// The table name + [Obsolete("This method will be replaced by EnsureTableExists.")] + public void EnsureExists(SqlTable table) + { + var columns = GetColumns(table); + if (columns.Count > 0) + { + if (!table.Columns.All(c => columns.Contains(c.Name)) || !columns.All(c => table.Columns.Any(c2 => c2.Name == c))) + { + var from = new SqlTable(table.Name, columns.Select(s => new SqlColumn(s, MySqlDbType.String)).ToList()); + database.Query(creator.AlterTable(from, table)); + } + } + else + { + database.Query(creator.CreateTable(table)); + } + } + public List GetColumns(SqlTable table) { var ret = new List(); diff --git a/TShockAPI/DB/TileManager.cs b/TShockAPI/DB/TileManager.cs old mode 100644 new mode 100755 index 9362e664..9144d34d --- a/TShockAPI/DB/TileManager.cs +++ b/TShockAPI/DB/TileManager.cs @@ -41,7 +41,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder)new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); UpdateBans(); } diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs index d4555fee..7a5f07c7 100755 --- a/TShockAPI/DB/UserManager.cs +++ b/TShockAPI/DB/UserManager.cs @@ -48,7 +48,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } /// diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs old mode 100644 new mode 100755 index fc4890af..88c97e9b --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -51,7 +51,7 @@ namespace TShockAPI.DB db.GetSqlType() == SqlType.Sqlite ? (IQueryBuilder) new SqliteQueryCreator() : new MysqlQueryCreator()); - creator.EnsureExists(table); + creator.EnsureTableStructure(table); } ///