From e581f6924983d7e2016894de18a11a0290c1c84f Mon Sep 17 00:00:00 2001 From: Twitchy Date: Sat, 6 Aug 2011 13:49:47 +1200 Subject: [PATCH] Few other fixes --- TShockAPI/DB/DBTools.cs | 206 ++++++++++++++++++++++++ TShockAPI/DBTools.cs | 317 ------------------------------------- TShockAPI/TShock.cs | 2 - TShockAPI/TShockAPI.csproj | 3 +- 4 files changed, 207 insertions(+), 321 deletions(-) create mode 100644 TShockAPI/DB/DBTools.cs delete mode 100644 TShockAPI/DBTools.cs diff --git a/TShockAPI/DB/DBTools.cs b/TShockAPI/DB/DBTools.cs new file mode 100644 index 00000000..8851a470 --- /dev/null +++ b/TShockAPI/DB/DBTools.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using TShockAPI.DB; + +namespace TShockAPI.DB +{ + public class DBTools + { + public static IDbConnection database; + + public static void CreateTable(string name, bool IfNotExists, List columns) + { + //Build up Creation string :) + StringBuilder sb = new StringBuilder(); + sb.Append("CREATE TABLE "); + + if (IfNotExists) + sb.Append("IF NOT EXISTS "); + + if (TShock.Config.StorageType.ToLower() == "sqlite") + sb.Append("'" + name + "' ("); + else if (TShock.Config.StorageType.ToLower() == "mysql") + sb.Append(name + " ("); + + int count = 0; + + foreach (Column column in columns) + { + count++; + if (column.Type.ToLower() == "int") + { + if (TShock.Config.StorageType.ToLower() == "sqlite") + sb.Append(column.Name + " NUMERIC "); + else if (TShock.Config.StorageType.ToLower() == "mysql") + sb.Append(column.Name + " INT(255) "); + } + else if (column.Type.ToLower() == "string") + { + if (TShock.Config.StorageType.ToLower() == "sqlite") + sb.Append(column.Name + " TEXT "); + else if (TShock.Config.StorageType.ToLower() == "mysql") + sb.Append(column.Name + " VARCHAR(255) "); + } + if (column.Unique) + { + if (columns.Count != count) + { + sb.Append("UNIQUE, "); + } + else + sb.Append("UNIQUE) "); + } + if (columns.Count == count) + sb.Append(")"); + } + + using (var com = database.CreateCommand()) + { + com.CommandText = sb.ToString(); + com.ExecuteNonQuery(); + } + } + + public static void InsertTable(string tablename, bool Ignore, List Values, List WhereAndStatements) + { + StringBuilder sb = new StringBuilder(); + sb.Append("INSERT "); + + if (Ignore) + { + if (TShock.Config.StorageType.ToLower() == "sqlite") + sb.Append("OR IGNORE "); + else if (TShock.Config.StorageType.ToLower() == "mysql") + sb.Append("IGNORE "); + } + + if (TShock.Config.StorageType.ToLower() == "sqlite") + sb.Append("INTO '" + tablename + "' ("); + else if (TShock.Config.StorageType.ToLower() == "mysql") + sb.Append("INTO " + tablename + " "); + + using (var com = database.CreateCommand()) + { + //Values + if (TShock.Config.StorageType.ToLower() == "sqlite") + { + int count = 0; + + foreach (ColumnData columnname in Values) + { + count++; + if (Values.Count != count) + sb.Append(columnname.Name + ", "); + else + sb.Append(columnname.Name + ") "); + } + + sb.Append("VALUES ("); + count = 0; + + foreach (ColumnData columnname in Values) + { + count++; + if (Values.Count != count) + { + sb.Append("@" + columnname.Name + ", "); + com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); + } + else + { + sb.Append("@" + columnname.Name + ") "); + com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); + } + } + } + else if (TShock.Config.StorageType.ToLower() == "mysql") + { + sb.Append("SET "); + int count = 0; + + foreach (ColumnData columnname in Values) + { + count++; + if (Values.Count != count) + { + sb.Append("@" + columnname.Name + "=" + columnname.Value + ", "); + com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); + } + else + { + sb.Append("@" + columnname.Name + "=" + columnname.Value + ") "); + com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); + } + } + } + + //Where Statement (if any) + if (WhereAndStatements.Count > 0) + { + sb.Append("WHERE "); + int count = 0; + + foreach (ColumnData columnname in WhereAndStatements) + { + count++; + if (Values.Count != count) + { + sb.Append("@" + columnname.Name + "=" + columnname.Value + "-where" + " AND "); + com.AddParameter("@" + columnname.Name.ToLower() + "-where", columnname.Value); + } + else + { + sb.Append("@" + columnname.Name + "=" + columnname.Value + "-where" + ";"); + com.AddParameter("@" + columnname.Name.ToLower() + "-where", columnname.Value); + } + } + } + } + } + } + + public class Column + { + public string Name { get; set; } + public string Type { get; set; } + public bool Unique { get; set; } + public string Parameters { get; set; } + + public Column(string name, bool unique, string type, string parameters) + { + Name = name; + Type = type; + Unique = unique; + Parameters = parameters; + } + + public Column() + { + Name = string.Empty; + Type = string.Empty; + Unique = false; + Parameters = string.Empty; + } + } + + public class ColumnData + { + public string Name { get; set; } + public object Value { get; set; } + + public ColumnData(string name, object value) + { + Name = name; + Value = value; + } + + public ColumnData() + { + Name = string.Empty; + Value = string.Empty; + } + } +} diff --git a/TShockAPI/DBTools.cs b/TShockAPI/DBTools.cs deleted file mode 100644 index 165352e0..00000000 --- a/TShockAPI/DBTools.cs +++ /dev/null @@ -1,317 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Text; -using TShockAPI.DB; - -namespace TShockAPI -{ - public class DBTools - { - internal static IDbConnection database; - - /// - /// Creates a Table, within the current open DB - /// - /// Name of the Table - /// The list of columns that the Table will have - /// Only try create Table if it does not exist - public static void CreateTable(string name, List columns, bool IfNotExists =true) - { - //Build up Creation string :) - StringBuilder sb = new StringBuilder(); - sb.Append("CREATE TABLE "); - - if (IfNotExists) - sb.Append("IF NOT EXISTS "); - - if (TShock.Config.StorageType.ToLower() == "sqlite") - sb.Append("'" + name + "' ("); - else if (TShock.Config.StorageType.ToLower() == "mysql") - sb.Append(name + " ("); - - int count = 0; - - foreach (Column column in columns) - { - count++; - if (column.Type.ToLower() == "int") - { - if (TShock.Config.StorageType.ToLower() == "sqlite") - sb.Append(column.Name + " NUMERIC "); - else if (TShock.Config.StorageType.ToLower() == "mysql") - sb.Append(column.Name + " INT(255) "); - } - else if (column.Type.ToLower() == "string") - { - if (TShock.Config.StorageType.ToLower() == "sqlite") - sb.Append(column.Name + " TEXT "); - else if (TShock.Config.StorageType.ToLower() == "mysql") - sb.Append(column.Name + " VARCHAR(255) "); - } - - if (column.Unique) - sb.Append("UNIQUE"); - - if (columns.Count == count) - sb.Append(")"); - else - sb.Append(", "); - } - - database.Query(sb.ToString()); - } - - /// - /// Inserts a list of values into a Table, if conditions are met - /// - /// Name of the Table - /// Ignore insert if feild is unique and there is already a exact entry - /// The list of values to enter into the table - /// The list of where statements that must be met, can be an empty list - public static int InsertTable(string tablename, bool Ignore, List Values, List WhereStatements) - { - StringBuilder sb = new StringBuilder(); - sb.Append("INSERT "); - - if (Ignore) - { - if (TShock.Config.StorageType.ToLower() == "sqlite") - sb.Append("OR IGNORE "); - else if (TShock.Config.StorageType.ToLower() == "mysql") - sb.Append("IGNORE "); - } - - if (TShock.Config.StorageType.ToLower() == "sqlite") - sb.Append("INTO '" + tablename + "' ("); - else if (TShock.Config.StorageType.ToLower() == "mysql") - sb.Append("INTO " + tablename + " "); - - using (var com = database.CreateCommand()) - { - //Values - if (TShock.Config.StorageType.ToLower() == "sqlite") - { - int count = 0; - - foreach (ColumnData columnname in Values) - { - count++; - if (Values.Count != count) - sb.Append(columnname.Name + ", "); - else - sb.Append(columnname.Name + ") "); - } - - sb.Append("VALUES ("); - count = 0; - - foreach (ColumnData columnname in Values) - { - count++; - if (Values.Count != count) - { - sb.Append("@" + columnname.Name.ToLower() + ", "); - com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); - } - else - { - sb.Append("@" + columnname.Name.ToLower() + ") "); - com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); - } - } - } - else if (TShock.Config.StorageType.ToLower() == "mysql") - { - sb.Append("SET "); - int count = 0; - - foreach (ColumnData columnname in Values) - { - count++; - if (Values.Count != count) - { - sb.Append("@" + columnname.Name.ToLower() + "=" + columnname.Value + ", "); - com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); - } - else - { - sb.Append("@" + columnname.Name.ToLower() + "=" + columnname.Value + ") "); - com.AddParameter("@" + columnname.Name.ToLower(), columnname.Value); - } - } - } - - //Where Statement (if any) - if (WhereStatements.Count > 0) - { - sb.Append("WHERE "); - int count = 0; - - foreach (ColumnData columnname in WhereStatements) - { - count++; - if (Values.Count != count) - { - sb.Append("@" + columnname.Name.ToLower() + "-where" + "=" + columnname.Value + " AND "); - com.AddParameter("@" + columnname.Name.ToLower() + "-where", columnname.Value); - } - else - { - sb.Append("@" + columnname.Name.ToLower() + "-where" + "=" + columnname.Value + ";"); - com.AddParameter("@" + columnname.Name.ToLower() + "-where", columnname.Value); - } - } - } - - com.CommandText = sb.ToString(); - - using (var reader = com.ExecuteReader()) - return reader.RecordsAffected; - } - } - - /// - /// Returns a list of values from a given Table, where conditions are met - /// - /// Name of the Table - /// The name of the column you are getting the values from - /// The list of where statements that must be met, can be an empty list - public static List ReadTable(string tablename, string getcolumn, List WhereStatements) - { - StringBuilder sb = new StringBuilder(); - List ReturnedValues = new List(); - - sb.Append("SELECT * FROM " + tablename + " "); - - using (var com = database.CreateCommand()) - { - //Where Statement (if any) - if (WhereStatements.Count > 0) - { - sb.Append("WHERE "); - int count = 0; - - foreach (ColumnData columnname in WhereStatements) - { - count++; - if (WhereStatements.Count != count) - { - sb.Append(columnname.Name + " =" + columnname.Value + " AND "); - } - else - { - sb.Append(columnname.Name + " =" + columnname.Value); - } - } - } - - com.CommandText = sb.ToString(); - - using (var reader = com.ExecuteReader()) - { - while (reader.Read()) - ReturnedValues.Add(reader.Get(getcolumn)); - } - } - return ReturnedValues; - } - - /// - /// Sets values in a Table, where statements are met - /// - /// Name of the Table - /// The column data you are setting - /// The list of where statements that must be met, can be an empty list - public static int SetTable(string tablename, ColumnData setcolumn, List WhereStatements) - { - StringBuilder sb = new StringBuilder(); - - sb.Append("UPDATE " + tablename + " SET " + setcolumn.Name + "=@setcolumn "); - - using (var com = database.CreateCommand()) - { - //Where Statement (if any) - if (WhereStatements.Count > 0) - { - sb.Append("WHERE "); - int count = 0; - - foreach (ColumnData columnname in WhereStatements) - { - count++; - if (WhereStatements.Count != count) - { - sb.Append(columnname.Name + " =" + columnname.Value + " AND "); - } - else - { - sb.Append(columnname.Name + " =" + columnname.Value); - } - } - } - - com.CommandText = sb.ToString(); - com.AddParameter("@setcolumn", setcolumn.Value); - - using (var reader = com.ExecuteReader()) - return reader.RecordsAffected; - } - } - } - - public class Column - { - public string Name { get; set; } - public string Type { get; set; } - public bool Unique { get; set; } - public string Parameters { get; set; } - - /// - /// The class for creating a new column type - /// - /// Name of the column - /// Whether there can be more than one exact value in the column - /// The type of column, currently the api only supports "string" or "int" - /// Extra SQL parameters given, can cause errors cross different SQL (SQLite and MySql) - public Column(string name, bool unique, string type, string parameters = "") - { - Name = name; - Type = type; - Unique = unique; - Parameters = parameters; - } - - public Column() - { - Name = string.Empty; - Type = string.Empty; - Unique = false; - Parameters = string.Empty; - } - } - - public class ColumnData - { - public string Name { get; set; } - public object Value { get; set; } - - /// - /// The class for testing, inserting or setting column data - /// - /// Column Name - /// Column Value - public ColumnData(string name, object value) - { - Name = name; - Value = value; - } - - public ColumnData() - { - Name = string.Empty; - Value = string.Empty; - } - } -} diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 61159e62..56f13d99 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -153,8 +153,6 @@ namespace TShockAPI throw new Exception("Invalid storage type"); } - DBTools.database = DB; - Backups = new BackupManager(Path.Combine(SavePath, "backups")); Backups.KeepFor = Config.BackupKeepFor; Backups.Interval = Config.BackupInterval; diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 640654d5..02e54387 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -93,7 +93,6 @@ - @@ -179,7 +178,7 @@ - +