From e8a5e7fb58a602eae231afee06ae4ddc6903a274 Mon Sep 17 00:00:00 2001 From: high Date: Sun, 24 Jul 2011 12:04:50 -0400 Subject: [PATCH] Now uses Query/QueryReader --- TShockAPI/DB/RegionManager.cs | 257 +++++++++++--------------------- TShockAPI/DB/UserManager.cs | 273 ++++++++++++---------------------- TShockAPI/DB/WarpsManager.cs | 212 +++++++++++--------------- 3 files changed, 269 insertions(+), 473 deletions(-) diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 9c31651c..57285994 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -44,7 +44,7 @@ namespace TShockAPI.DB using (var com = database.CreateCommand()) { string query = (TShock.Config.StorageType.ToLower() == "sqlite") ? - "CREATE TABLE IF NOT EXISTS 'Regions' ('X1' NUMERIC, 'Y1' NUMERIC, 'height' NUMERIC, 'width' NUMERIC, 'RegionName' TEXT PRIMARY KEY, 'WorldID' TEXT, 'UserIds' TEXT, 'Protected' NUMERIC);": + "CREATE TABLE IF NOT EXISTS 'Regions' ('X1' NUMERIC, 'Y1' NUMERIC, 'height' NUMERIC, 'width' NUMERIC, 'RegionName' TEXT PRIMARY KEY, 'WorldID' TEXT, 'UserIds' TEXT, 'Protected' NUMERIC);" : "CREATE TABLE IF NOT EXISTS Regions (X1 INT(11), Y1 INT(11), height INT(11), width INT(11), RegionName VARCHAR(255) PRIMARY, WorldID VARCHAR(255), UserIds VARCHAR(255), Protected INT(1));"; database.Query(query); @@ -122,22 +122,13 @@ namespace TShockAPI.DB region.Area = rect; using (var com = database.CreateCommand()) { - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = - "INSERT OR IGNORE INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = - "INSERT IGNORE INTO Regions SET X1=@tx, Y1=@ty, height=@height, width=@width, RegionName=@name, WorldID=@world, UserIds=@userids, Protected=@protected;"; - com.AddParameter("@tx", region.Area.X); - com.AddParameter("@ty", region.Area.Y); - com.AddParameter("@width", region.Area.Width); - com.AddParameter("@height", region.Area.Height); - com.AddParameter("@name", region.Name); - com.AddParameter("@worldid", region.WorldID); + string query = (TShock.Config.StorageType.ToLower() == "sqlite") ? + "INSERT OR IGNORE INTO Regions VALUES (@0, @1, @2, @3, @4, @5, @6, @7);" : + "INSERT IGNORE INTO Regions SET X1=@0, Y1=@1, height=@2, width=@3, RegionName=@4, WorldID=@5, UserIds=@6, Protected=@7;"; + database.Query(query, region.Area.X, region.Area.Y, region.Area.Width, region.Area.Height, region.Name, region.WorldID, "", region.DisableBuild); + //Todo: What should this be? We don't really have a way to go from ips to userids - com.AddParameter("@userids", ""/*string.Join(",", region.AllowedIDs)*/); - com.AddParameter("@protected", region.DisableBuild); - int num = com.ExecuteNonQuery(); + /*string.Join(",", region.AllowedIDs)*/ } } } @@ -157,17 +148,8 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Regions SET WorldID=@worldid"; - com.AddParameter("@worldid", Main.worldID.ToString()); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - com.CommandText = "UPDATE Regions SET UserIds=@UserIds"; - com.AddParameter("@UserIds", ""); - com.ExecuteNonQuery(); - ReloadAllRegions(); - } + database.Query("UPDATE Regions SET WorldID=@0, UserIds=''", Main.worldID.ToString()); + ReloadAllRegions(); } catch (Exception ex) { @@ -179,60 +161,7 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "SELECT * FROM Regions WHERE WorldID=@worldid"; - com.AddParameter("@worldid", Main.worldID.ToString()); - using (var reader = com.ExecuteReader()) - { - Regions.Clear(); - while (reader.Read()) - { - int X1 = reader.Get("X1"); - int Y1 = reader.Get("Y1"); - int height = reader.Get("height"); - int width = reader.Get("width"); - int Protected = reader.Get("Protected"); - string MergedIDs = DbExt.Get(reader, "UserIds"); - string name = DbExt.Get(reader, "RegionName"); - - string[] SplitIDs = MergedIDs.Split(','); - - Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected != 0, Main.worldID.ToString()); - try - { - for (int i = 0; i < SplitIDs.Length; i++) - { - r.AllowedIDs.Add(Convert.ToInt32(SplitIDs[i])); - } - } - catch (Exception e) - { - Log.Error("Your database contains invalid UserIDs (they should be ints)."); - Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field."); - Log.Error(e.Message); - Log.Error(e.StackTrace); - } - - Regions.Add(r); - } - reader.Close(); - } - } - } - catch (Exception ex) - { - Log.Error(ex.ToString()); - } - } - - public void ReloadForUnitTest(String n) - { - using (var com = database.CreateCommand()) - { - com.CommandText = "SELECT * FROM Regions WHERE WorldID=@worldid"; - com.AddParameter("@worldid", n); - using (var reader = com.ExecuteReader()) + using (var reader = database.QueryReader("SELECT * FROM Regions WHERE WorldID=@0", Main.worldID.ToString())) { Regions.Clear(); while (reader.Read()) @@ -244,6 +173,7 @@ namespace TShockAPI.DB int Protected = reader.Get("Protected"); string MergedIDs = DbExt.Get(reader, "UserIds"); string name = DbExt.Get(reader, "RegionName"); + string[] SplitIDs = MergedIDs.Split(','); Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected != 0, Main.worldID.ToString()); @@ -251,7 +181,7 @@ namespace TShockAPI.DB { for (int i = 0; i < SplitIDs.Length; i++) { - r.AllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); + r.AllowedIDs.Add(Convert.ToInt32(SplitIDs[i])); } } catch (Exception e) @@ -264,32 +194,60 @@ namespace TShockAPI.DB Regions.Add(r); } - reader.Close(); } } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + } + + public void ReloadForUnitTest(String n) + { + + using (var reader = database.QueryReader("SELECT * FROM Regions WHERE WorldID=@0", n)) + { + Regions.Clear(); + while (reader.Read()) + { + int X1 = reader.Get("X1"); + int Y1 = reader.Get("Y1"); + int height = reader.Get("height"); + int width = reader.Get("width"); + int Protected = reader.Get("Protected"); + string MergedIDs = DbExt.Get(reader, "UserIds"); + string name = DbExt.Get(reader, "RegionName"); + string[] SplitIDs = MergedIDs.Split(','); + + Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected != 0, Main.worldID.ToString()); + try + { + for (int i = 0; i < SplitIDs.Length; i++) + { + r.AllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); + } + } + catch (Exception e) + { + Log.Error("Your database contains invalid UserIDs (they should be ints)."); + Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field."); + Log.Error(e.Message); + Log.Error(e.StackTrace); + } + + Regions.Add(r); + } + } + } public bool AddRegion(int tx, int ty, int width, int height, string regionname, string worldid) { try { - using (var com = database.CreateCommand()) - { - com.CommandText = - "INSERT INTO Regions VALUES (@tx, @ty, @height, @width, @name, @worldid, @userids, @protected);"; - com.AddParameter("@tx", tx); - com.AddParameter("@ty", ty); - com.AddParameter("@width", width); - com.AddParameter("@height", height); - com.AddParameter("@name", regionname.ToLower()); - com.AddParameter("@worldid", worldid); - com.AddParameter("@userids", ""); - com.AddParameter("@protected", 1); - com.ExecuteNonQuery(); - Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, true, worldid)); - return true; - - } + database.Query("INSERT INTO Regions VALUES (@0, @1, @2, @3, @4, @5, @6, @7);", tx, ty, width, height, regionname, worldid, "", 1); + Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, true, worldid)); + return true; } catch (Exception ex) { @@ -302,15 +260,9 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "DELETE FROM Regions WHERE RegionName=@name AND WorldID=@worldid"; - com.AddParameter("@name", name.ToLower()); - com.AddParameter("@worldid", Main.worldID.ToString()); - com.ExecuteNonQuery(); - Regions.Remove(getRegion(name)); - return true; - } + database.Query("DELETE FROM Regions WHERE RegionName=@0 AND WorldID=@1", name, Main.worldID.ToString()); + Regions.Remove(getRegion(name)); + return true; } catch (Exception ex) { @@ -323,16 +275,9 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Regions SET Protected=@bool WHERE RegionName=@name AND WorldID=@worldid"; - com.AddParameter("@name", name); - com.AddParameter("@bool", state ? 1 : 0); - com.AddParameter("@worldid", Main.worldID.ToString()); - com.ExecuteNonQuery(); - getRegion(name).DisableBuild = state; - return true; - } + database.Query("UPDATE Regions SET Protected=@0 WHERE RegionName=@1 AND WorldID=@2", state ? 1 : 0, name, Main.worldID.ToString()); + getRegion(name).DisableBuild = state; + return true; } catch (Exception ex) { @@ -345,16 +290,9 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Regions SET Protected=@bool WHERE RegionName=@name AND WorldID=@worldid"; - com.AddParameter("@name", name); - com.AddParameter("@bool", state ? 1 : 0); - com.AddParameter("@worldid", world); - com.ExecuteNonQuery(); - getRegion(name).DisableBuild = state; - return true; - } + database.Query("UPDATE Regions SET Protected=@0 WHERE RegionName=@1 AND WorldID=@2", state ? 1 : 0, name, world); + getRegion(name).DisableBuild = state; + return true; } catch (Exception ex) { @@ -412,7 +350,7 @@ namespace TShockAPI.DB } }*/ String[] s = MergedIDs.Split(','); - for( int i = 0; i < s.Length; i++ ) + for (int i = 0; i < s.Length; i++) { if (!s[i].Equals("")) SplitIDs.Add(s[i]); @@ -422,47 +360,31 @@ namespace TShockAPI.DB public bool AddNewUser(string regionName, String userName) { - - try { - using (var com = database.CreateCommand()) + string MergedIDs = string.Empty; + using (var reader = database.QueryReader("SELECT * FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName, Main.worldID.ToString())) { - com.CommandText = "SELECT * FROM Regions WHERE RegionName=@name AND WorldID=@worldid"; - com.AddParameter("@name", regionName); - com.AddParameter("@worldid", Main.worldID.ToString()); - string MergedIDs = string.Empty; - using (var reader = com.ExecuteReader()) - { - if (reader.Read()) - MergedIDs = reader.Get("UserIds"); - } + if (reader.Read()) + MergedIDs = reader.Get("UserIds"); + } - if (MergedIDs == string.Empty) - MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName)); - else - MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName)); - com.Parameters.Clear(); - com.CommandText = "UPDATE Regions SET UserIds=@ids WHERE RegionName=@name AND WorldID=@worldid"; - com.AddParameter("@ids", MergedIDs); - com.AddParameter("@name", regionName); - com.AddParameter("@worldid", Main.worldID.ToString()); - if (com.ExecuteNonQuery() > 0) - { - ReloadAllRegions(); - return true; - } - else - { - return false; - } + if (MergedIDs == string.Empty) + MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName)); + else + MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName)); + + if (database.Query("UPDATE Regions SET UserIds=@0 WHERE RegionName=@1 AND WorldID=@2", MergedIDs, regionName, Main.worldID.ToString()) > 0) + { + ReloadAllRegions(); + return true; } } catch (Exception ex) { Log.Error(ex.ToString()); - return false; } + return false; } /// @@ -475,15 +397,10 @@ namespace TShockAPI.DB var regions = new List(); try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT RegionName FROM Regions WHERE WorldID=@0", worldid)) { - com.CommandText = "SELECT RegionName FROM Regions WHERE WorldID=@worldid"; - com.AddParameter("@worldid", worldid); - using (var reader = com.ExecuteReader()) - { - while (reader.Read()) - regions.Add(new Region { Name = reader.Get("RegionName") }); - } + while (reader.Read()) + regions.Add(new Region { Name = reader.Get("RegionName") }); } } catch (Exception ex) @@ -513,7 +430,7 @@ namespace TShockAPI.DB public List AllowedIDs { get; set; } public Region(Rectangle region, string name, bool disablebuild, string RegionWorldIDz) - :this() + : this() { Area = region; Name = name; diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs index 6dbb8d21..86a408a0 100644 --- a/TShockAPI/DB/UserManager.cs +++ b/TShockAPI/DB/UserManager.cs @@ -34,69 +34,60 @@ namespace TShockAPI.DB { database = db; - using (var com = database.CreateCommand()) + + string query = (TShock.Config.StorageType.ToLower() == "sqlite") ? + "CREATE TABLE IF NOT EXISTS 'Users' ('ID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 'Username' VARCHAR(32) UNIQUE, 'Password' VARCHAR(64), 'Usergroup' TEXT, 'IP' VARCHAR(32));" : + "CREATE TABLE IF NOT EXISTS Users (ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Username VARCHAR(32) UNIQUE, Password VARCHAR(64), Usergroup VARCHAR(255), IP VARCHAR(15));"; + + database.Query(query); + + String file = Path.Combine(TShock.SavePath, "users.txt"); + if (File.Exists(file)) { - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = - "CREATE TABLE IF NOT EXISTS 'Users' ('ID' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 'Username' VARCHAR(32) UNIQUE, 'Password' VARCHAR(64), 'Usergroup' TEXT, 'IP' VARCHAR(32));"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = - "CREATE TABLE IF NOT EXISTS Users (ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Username VARCHAR(32) UNIQUE, Password VARCHAR(64), Usergroup VARCHAR(255), IP VARCHAR(15));"; - - com.ExecuteNonQuery(); - - String file = Path.Combine(TShock.SavePath, "users.txt"); - if (File.Exists(file)) + using (StreamReader sr = new StreamReader(file)) { - using (StreamReader sr = new StreamReader(file)) + String line; + while ((line = sr.ReadLine()) != null) { - String line; - while ((line = sr.ReadLine()) != null ) + if (line.Equals("") || line.Substring(0, 1).Equals("#")) + continue; + String[] info = line.Split(' '); + String username = ""; + String sha = ""; + String group = ""; + String ip = ""; + + String[] nameSha = info[0].Split(':'); + + if (nameSha.Length < 2) { - if (line.Equals("") || line.Substring(0, 1).Equals("#") ) - continue; - String[] info = line.Split(' '); - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO Users (Username, Password, Usergroup, IP) VALUES (@name, @pass, @group, @ip);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO Users SET Username=@name, Password=@pass, Usergroup=@group, IP=@ip ;"; - - String username = ""; - String sha = ""; - String group = ""; - String ip = ""; - - String[] nameSha = info[0].Split(':'); - - if (nameSha.Length < 2) - { - username = nameSha[0]; - ip = nameSha[0]; - group = info[1]; - } - else - { - username = nameSha[0]; - sha = nameSha[1]; - group = info[1]; - } - com.AddParameter("@name", username.Trim()); - com.AddParameter("@pass", sha.Trim()); - com.AddParameter("@group", group.Trim()); - com.AddParameter("@ip", ip.Trim()); - com.ExecuteNonQuery(); - com.Parameters.Clear(); + username = nameSha[0]; + ip = nameSha[0]; + group = info[1]; } + else + { + username = nameSha[0]; + sha = nameSha[1]; + group = info[1]; + } + + query = (TShock.Config.StorageType.ToLower() == "sqlite") ? + "INSERT OR IGNORE INTO Users (Username, Password, Usergroup, IP) VALUES (@0, @1, @2, @3)" : + "INSERT IGNORE INTO Users SET Username=@0, Password=@1, Usergroup=@2, IP=@3"; + + database.Query(query, username.Trim(), sha.Trim(), group.Trim(), ip.Trim()); } - String path = Path.Combine(TShock.SavePath, "old_configs"); - String file2 = Path.Combine(path, "users.txt"); - if (!Directory.Exists(path)) - System.IO.Directory.CreateDirectory(path); - if (File.Exists(file2)) - File.Delete(file2); - File.Move(file, file2); } + String path = Path.Combine(TShock.SavePath, "old_configs"); + String file2 = Path.Combine(path, "users.txt"); + if (!Directory.Exists(path)) + System.IO.Directory.CreateDirectory(path); + if (File.Exists(file2)) + File.Delete(file2); + File.Move(file, file2); } + } /// @@ -107,24 +98,11 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "INSERT INTO Users (Username, Password, UserGroup, IP) VALUES (@name, @password, @group, @ip);"; - com.AddParameter("@name", user.Name); - com.AddParameter("@password", Tools.HashPassword(user.Password)); + if (!TShock.Groups.GroupExists(user.Group)) + throw new GroupNotExistsException(user.Group); - if (!TShock.Groups.GroupExists(user.Group)) - throw new GroupNotExistsException(user.Group); - - com.AddParameter("@group", user.Group); - com.AddParameter("@ip", user.Address); - - using (var reader = com.ExecuteReader()) - { - if (reader.RecordsAffected < 1) - throw new UserExistsException(user.Name); - } - } + if (database.Query("INSERT INTO Users (Username, Password, UserGroup, IP) VALUES (@0, @1, @2, @3);", user.Name, Tools.HashPassword(user.Password), user.Group, user.Address) < 1) + throw new UserExistsException(user.Name); } catch (Exception ex) { @@ -140,25 +118,18 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + int affected = -1; + if (!string.IsNullOrEmpty(user.Address)) { - if (!string.IsNullOrEmpty(user.Address)) - { - com.CommandText = "DELETE FROM Users WHERE IP=@ip"; - com.AddParameter("@ip", user.Address); - } - else - { - com.CommandText = "DELETE FROM Users WHERE Username=@name"; - com.AddParameter("@name", user.Name); - } - - using (var reader = com.ExecuteReader()) - { - if (reader.RecordsAffected < 1) - throw new UserNotExistException(string.IsNullOrEmpty(user.Address) ? user.Name : user.Address); - } + affected = database.Query("DELETE FROM Users WHERE IP=@0", user.Address); } + else + { + affected = database.Query("DELETE FROM Users WHERE Username=@0", user.Name); + } + + if (affected < 1) + throw new UserNotExistException(string.IsNullOrEmpty(user.Address) ? user.Name : user.Address); } catch (Exception ex) { @@ -176,18 +147,8 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Users SET Password = @password WHERE Username = @name;"; - com.AddParameter("@name", user.Name); - com.AddParameter("@password", Tools.HashPassword(password)); - - using (var reader = com.ExecuteReader()) - { - if (reader.RecordsAffected < 1) - throw new UserExistsException(user.Name); - } - } + if (database.Query("UPDATE Users SET Password = @0 WHERE Username = @1;", Tools.HashPassword(password), user.Name) < 1) + throw new UserExistsException(user.Name); } catch (Exception ex) { @@ -204,22 +165,11 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Users SET UserGroup = @group WHERE Username = @name;"; - com.AddParameter("@name", user.Name); + if (!TShock.Groups.GroupExists(group)) + throw new GroupNotExistsException(group); - if (!TShock.Groups.GroupExists(group)) - throw new GroupNotExistsException(group); - - com.AddParameter("@group", group); - - using (var reader = com.ExecuteReader()) - { - if (reader.RecordsAffected < 1) - throw new UserExistsException(user.Name); - } - } + if (database.Query("UPDATE Users SET UserGroup = @0 WHERE Username = @1;", group, user.Name) < 1) + throw new UserExistsException(user.Name); } catch (Exception ex) { @@ -238,21 +188,15 @@ namespace TShockAPI.DB string[] returndata = new string[2]; try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT * FROM Users WHERE Username=@0", username)) { - com.CommandText = "SELECT * FROM Users WHERE Username=@name"; - com.AddParameter("@name", username.ToLower()); - - using (var reader = com.ExecuteReader()) + if (reader.Read()) { - if (reader.Read()) - { - returndata[0] = reader.Get("Password"); - returndata[1] = reader.Get("UserGroup"); - return returndata; - } - reader.Close(); + returndata[0] = reader.Get("Password"); + returndata[1] = reader.Get("UserGroup"); + return returndata; } + reader.Close(); } } catch (Exception ex) @@ -266,18 +210,11 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT * FROM Users WHERE Username=@0", username)) { - com.CommandText = "SELECT * FROM Users WHERE Username=@name"; - com.AddParameter("@name", username.ToLower()); - - using (var reader = com.ExecuteReader()) + if (reader.Read()) { - if (reader.Read()) - { - return reader.Get("ID"); - } - reader.Close(); + return reader.Get("ID"); } } } @@ -296,18 +233,12 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT * FROM Users WHERE IP=@0", ip)) { - com.CommandText = "SELECT * FROM Users WHERE IP=@ip"; - com.AddParameter("@ip", ip); - - using (var reader = com.ExecuteReader()) + if (reader.Read()) { - if (reader.Read()) - { - string group = reader.Get("UserGroup"); - return Tools.GetGroup(group); - } + string group = reader.Get("UserGroup"); + return Tools.GetGroup(group); } } } @@ -322,19 +253,13 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT IP, UserGroup FROM Users")) { - com.CommandText = "SELECT * FROM Users"; - - using (var reader = com.ExecuteReader()) + while (reader.Read()) { - while(reader.Read()) + if (Tools.GetIPv4Address(reader.Get("IP")) == ip) { - if (Tools.GetIPv4Address(reader.Get("IP")) == ip) - { - string group = reader.Get("UserGroup"); - return Tools.GetGroup(group); - } + return Tools.GetGroup(reader.Get("UserGroup")); } } } @@ -373,27 +298,23 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + IDataReader result; + if (string.IsNullOrEmpty(user.Address)) { - if (string.IsNullOrEmpty(user.Address)) - { - com.CommandText = "SELECT * FROM Users WHERE Username=@name"; - com.AddParameter("@name", user.Name); - } - else - { - com.CommandText = "SELECT * FROM Users WHERE IP=@ip"; - com.AddParameter("@ip", user.Address); - } + result = database.QueryReader("SELECT * FROM Users WHERE Username=@0", user.Name); + } + else + { + result = database.QueryReader("SELECT * FROM Users WHERE IP=@0", user.Address); + } - using (var reader = com.ExecuteReader()) + using (var reader = result) + { + if (reader.Read()) { - if (reader.Read()) - { - user.ID = reader.Get("ID"); - user.Group = reader.Get("Usergroup"); - return user; - } + user.ID = reader.Get("ID"); + user.Group = reader.Get("Usergroup"); + return user; } } } diff --git a/TShockAPI/DB/WarpsManager.cs b/TShockAPI/DB/WarpsManager.cs index 5802c632..39411cc7 100644 --- a/TShockAPI/DB/WarpsManager.cs +++ b/TShockAPI/DB/WarpsManager.cs @@ -34,112 +34,96 @@ namespace TShockAPI.DB { database = db; - using (var com = database.CreateCommand()) + string query = (TShock.Config.StorageType.ToLower() == "sqlite") ? + "CREATE TABLE IF NOT EXISTS 'Warps' ('X' NUMERIC, 'Y' NUMERIC, 'WarpName' TEXT PRIMARY KEY, 'WorldID' TEXT);" : + "CREATE TABLE IF NOT EXISTS Warps (X INT(11), Y INT(11), WarpName VARCHAR(255) PRIMARY, WorldID VARCHAR(255));"; + + database.Query(query); + + String file = Path.Combine(TShock.SavePath, "warps.xml"); + String name = ""; + String world = ""; + int x1 = 0; + int y1 = 0; + if (File.Exists(file)) { - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = - "CREATE TABLE IF NOT EXISTS 'Warps' ('X' NUMERIC, 'Y' NUMERIC, 'WarpName' TEXT PRIMARY KEY, 'WorldID' TEXT);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = - "CREATE TABLE IF NOT EXISTS Warps (X INT(11), Y INT(11), WarpName VARCHAR(255) PRIMARY, WorldID VARCHAR(255));"; - - com.ExecuteNonQuery(); - - String file = Path.Combine(TShock.SavePath, "warps.xml"); - String name = ""; - String world = ""; - int x1 = 0; - int y1 = 0; - if (File.Exists(file)) + XmlReader reader; + using (reader = XmlReader.Create(new StreamReader(file))) { - XmlReader reader; - using (reader = XmlReader.Create(new StreamReader(file))) + // Parse the file and display each of the nodes. + while (reader.Read()) { - // Parse the file and display each of the nodes. - while (reader.Read()) + switch (reader.NodeType) { - switch (reader.NodeType) - { - case XmlNodeType.Element: - switch (reader.Name) - { - case "Warp": - name = ""; - world = ""; - x1 = 0; - y1 = 0; - break; - case "WarpName": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - name = reader.Value; - break; - case "X": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out x1); - break; - case "Y": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - int.TryParse(reader.Value, out y1); - break; - case "WorldName": - while (reader.NodeType != XmlNodeType.Text) - reader.Read(); - world = reader.Value; - break; - } - break; - case XmlNodeType.Text: + case XmlNodeType.Element: + switch (reader.Name) + { + case "Warp": + name = ""; + world = ""; + x1 = 0; + y1 = 0; + break; + case "WarpName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + name = reader.Value; + break; + case "X": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out x1); + break; + case "Y": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + int.TryParse(reader.Value, out y1); + break; + case "WorldName": + while (reader.NodeType != XmlNodeType.Text) + reader.Read(); + world = reader.Value; + break; + } + break; + case XmlNodeType.Text: - break; - case XmlNodeType.XmlDeclaration: - case XmlNodeType.ProcessingInstruction: - break; - case XmlNodeType.Comment: - break; - case XmlNodeType.EndElement: - if (reader.Name.Equals("Warp")) - { - if (TShock.Config.StorageType.ToLower() == "sqlite") - com.CommandText = "INSERT OR IGNORE INTO Warps VALUES (@tx, @ty,@name, @worldid);"; - else if (TShock.Config.StorageType.ToLower() == "mysql") - com.CommandText = "INSERT IGNORE INTO Warps SET X=@tx, Y=@ty, WarpName=@name, WorldID=@worldid;"; - com.AddParameter("@tx", x1); - com.AddParameter("@ty", y1); - com.AddParameter("@name", name); - com.AddParameter("@worldid", world); - com.ExecuteNonQuery(); - com.Parameters.Clear(); - } - break; - } + break; + case XmlNodeType.XmlDeclaration: + case XmlNodeType.ProcessingInstruction: + break; + case XmlNodeType.Comment: + break; + case XmlNodeType.EndElement: + if (reader.Name.Equals("Warp")) + { + query = (TShock.Config.StorageType.ToLower() == "sqlite") ? + "INSERT OR IGNORE INTO Warps VALUES (@0, @1,@2, @3);" : + "INSERT IGNORE INTO Warps SET X=@0, Y=@1, WarpName=@2, WorldID=@3;"; + database.Query(query, x1, y1, name, world); + } + break; } - } - reader.Close(); - String path = Path.Combine(TShock.SavePath, "old_configs"); - String file2 = Path.Combine(path, "warps.xml"); - if (!Directory.Exists(path)) - System.IO.Directory.CreateDirectory(path); - if (File.Exists(file2)) - File.Delete(file2); - //File.Move(file, file2); + } + reader.Close(); + String path = Path.Combine(TShock.SavePath, "old_configs"); + String file2 = Path.Combine(path, "warps.xml"); + if (!Directory.Exists(path)) + System.IO.Directory.CreateDirectory(path); + if (File.Exists(file2)) + File.Delete(file2); + //File.Move(file, file2); } + } public void ConvertDB() { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "UPDATE Warps SET WorldID=@worldid"; - com.AddParameter("@worldid", Main.worldID.ToString()); - com.ExecuteNonQuery(); - } + database.Query("UPDATE Warps SET WorldID=@0", Main.worldID.ToString()); } catch (Exception ex) { @@ -151,16 +135,8 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "INSERT INTO Warps (X, Y, WarpName, WorldID) VALUES (@x, @y, @name, @worldid);"; - com.AddParameter("@x", x); - com.AddParameter("@y", y); - com.AddParameter("@name", name.ToLower()); - com.AddParameter("@worldid", worldid); - com.ExecuteNonQuery(); - return true; - } + database.Query("INSERT INTO Warps (X, Y, WarpName, WorldID) VALUES (@0, @1, @2, @3);", x, y, name, worldid); + return true; } catch (Exception ex) { @@ -173,14 +149,8 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) - { - com.CommandText = "DELETE FROM Warps WHERE WarpName=@name AND WorldID=@worldid"; - com.AddParameter("@name", name.ToLower()); - com.AddParameter("@worldid", Main.worldID.ToString()); - com.ExecuteNonQuery(); - return true; - } + database.Query("DELETE FROM Warps WHERE WarpName=@0 AND WorldID=@1", name, Main.worldID.ToString()); + return true; } catch (Exception ex) { @@ -193,18 +163,11 @@ namespace TShockAPI.DB { try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT * FROM Warps WHERE WarpName=@0 AND WorldID=@1", name, Main.worldID.ToString())) { - com.CommandText = "SELECT * FROM Warps WHERE WarpName=@name AND WorldID=@worldid"; - com.AddParameter("@name", name); - com.AddParameter("@worldid", Main.worldID.ToString()); - using (var reader = com.ExecuteReader()) + if (reader.Read()) { - if (reader.Read()) - { - return new Warp(new Vector2(reader.Get("X"), reader.Get("Y")), reader.Get("WarpName"), reader.Get("WorldID")); - } - reader.Close(); + return new Warp(new Vector2(reader.Get("X"), reader.Get("Y")), reader.Get("WarpName"), reader.Get("WorldID")); } } } @@ -225,15 +188,10 @@ namespace TShockAPI.DB var warps = new List(); try { - using (var com = database.CreateCommand()) + using (var reader = database.QueryReader("SELECT WarpName FROM Warps WHERE WorldID=@0", worldid)) { - com.CommandText = "SELECT WarpName FROM Warps WHERE WorldID=@worldid"; - com.AddParameter("@worldid", worldid); - using (var reader = com.ExecuteReader()) - { - while (reader.Read()) - warps.Add(new Warp { WarpName = reader.Get("WarpName") }); - } + while (reader.Read()) + warps.Add(new Warp { WarpName = reader.Get("WarpName") }); } } catch (Exception ex)