Adds SQL Queries for Update, Read and Insert
This commit is contained in:
parent
7af6f7fae6
commit
2c4625e426
4 changed files with 197 additions and 1 deletions
|
|
@ -13,6 +13,9 @@ namespace TShockAPI.DB
|
|||
string CreateTable(SqlTable table);
|
||||
string AlterTable(SqlTable from, SqlTable to);
|
||||
string DbTypeToString(MySqlDbType type, int? length);
|
||||
string UpdateValue(string table, List<SqlValue> values, List<SqlValue> wheres);
|
||||
string InsertValues(string table, List<SqlValue> values);
|
||||
string ReadColumn(string table, List<SqlValue> wheres);
|
||||
}
|
||||
|
||||
public class SqliteQueryCreator : IQueryBuilder
|
||||
|
|
@ -44,9 +47,79 @@ namespace TShockAPI.DB
|
|||
CREATE TABLE "main"."Bans" ("IP" TEXT PRIMARY KEY ,"Name" TEXT)
|
||||
INSERT INTO "main"."Bans" SELECT "IP","Name" FROM "main"."oXHFcGcd04oXHFcGcd04_Bans"
|
||||
DROP TABLE "main"."oXHFcGcd04oXHFcGcd04_Bans"
|
||||
*
|
||||
* Twitchy - Oh. I get it!
|
||||
*/
|
||||
}
|
||||
public string UpdateValue(string table, List<SqlValue> values, List<SqlValue> wheres)
|
||||
{
|
||||
var sbvalues = new StringBuilder();
|
||||
var sbwheres = new StringBuilder();
|
||||
int count = 0;
|
||||
foreach (SqlValue value in values)
|
||||
{
|
||||
sbvalues.Append(value.Name + "=" + value.Value.ToString());
|
||||
if (count != values.Count - 1)
|
||||
sbvalues.Append(",");
|
||||
count++;
|
||||
}
|
||||
count = 0;
|
||||
foreach (SqlValue where in wheres)
|
||||
{
|
||||
sbwheres.Append(where.Name + "=" + where.Value.ToString());
|
||||
if (count != wheres.Count - 1)
|
||||
sbvalues.Append(" AND ");
|
||||
count++;
|
||||
}
|
||||
|
||||
if (wheres.Count > 0)
|
||||
return "UPDATE '{0}' SET {1} WHERE {2}".SFormat(table, sbvalues.ToString(), sbwheres.ToString());
|
||||
else
|
||||
return "UPDATE '{0}' SET {1}".SFormat(table, sbvalues.ToString());
|
||||
}
|
||||
public string InsertValues(string table, List<SqlValue> values)
|
||||
{
|
||||
var sbnames = new StringBuilder();
|
||||
var sbvalues = new StringBuilder();
|
||||
int count = 0;
|
||||
|
||||
foreach (SqlValue name in values)
|
||||
{
|
||||
sbnames.Append(name.Name);
|
||||
|
||||
if (count != values.Count - 1)
|
||||
sbnames.Append(", ");
|
||||
count++;
|
||||
}
|
||||
count = 0;
|
||||
foreach (SqlValue value in values)
|
||||
{
|
||||
sbvalues.Append(value.Value.ToString());
|
||||
if (count != values.Count - 1)
|
||||
sbvalues.Append(", ");
|
||||
count++;
|
||||
}
|
||||
|
||||
return "INSERT INTO '{0}' ({1}) VALUES ({2})".SFormat(table, sbnames.ToString(), sbvalues.ToString());
|
||||
}
|
||||
public string ReadColumn(string table, List<SqlValue> wheres)
|
||||
{
|
||||
var sbwheres = new StringBuilder();
|
||||
int count = 0;
|
||||
|
||||
foreach (SqlValue where in wheres)
|
||||
{
|
||||
sbwheres.Append(where.Name + "=" + where.Value.ToString());
|
||||
if (count != wheres.Count - 1)
|
||||
sbwheres.Append(" AND ");
|
||||
count++;
|
||||
}
|
||||
|
||||
if(wheres.Count > 0)
|
||||
return "SELECT * FROM {0} WHERE {1}".SFormat(table, sbwheres.ToString());
|
||||
else
|
||||
return "SELECT * FROM {0}".SFormat(table);
|
||||
}
|
||||
|
||||
static readonly Dictionary<MySqlDbType, string> TypesAsStrings = new Dictionary<MySqlDbType, string>
|
||||
{
|
||||
|
|
@ -92,7 +165,75 @@ namespace TShockAPI.DB
|
|||
var drop = "DROP TABLE {0}_{1}".SFormat(rstr, from.Name);
|
||||
return "{0}; {1}; {2}; {3};".SFormat(alter, create, insert, drop);
|
||||
}
|
||||
public string UpdateValue(string table, List<SqlValue> values, List<SqlValue> wheres)
|
||||
{
|
||||
var sbvalues = new StringBuilder();
|
||||
var sbwheres = new StringBuilder();
|
||||
int count = 0;
|
||||
foreach (SqlValue value in values)
|
||||
{
|
||||
sbvalues.Append(value.Name + "=" + value.Value.ToString());
|
||||
if (count != values.Count - 1)
|
||||
sbvalues.Append("AND");
|
||||
count++;
|
||||
}
|
||||
count = 0;
|
||||
foreach (SqlValue where in wheres)
|
||||
{
|
||||
sbwheres.Append(where.Name + "=" + where.Value.ToString());
|
||||
if (count != wheres.Count - 1)
|
||||
sbvalues.Append(" AND ");
|
||||
count++;
|
||||
}
|
||||
|
||||
if (wheres.Count > 0)
|
||||
return "UPDATE {0} SET {1} WHERE {2}".SFormat(table, sbvalues.ToString(), sbwheres.ToString());
|
||||
else
|
||||
return "UPDATE {0} SET {1}".SFormat(table, sbvalues.ToString());
|
||||
}
|
||||
public string InsertValues(string table, List<SqlValue> values)
|
||||
{
|
||||
var sbnames = new StringBuilder();
|
||||
var sbvalues = new StringBuilder();
|
||||
int count = 0;
|
||||
|
||||
foreach (SqlValue name in values)
|
||||
{
|
||||
sbnames.Append(name.Name);
|
||||
|
||||
if (count != values.Count - 1)
|
||||
sbnames.Append(", ");
|
||||
count++;
|
||||
}
|
||||
count = 0;
|
||||
foreach (SqlValue value in values)
|
||||
{
|
||||
sbvalues.Append(value.Value.ToString());
|
||||
if (count != values.Count - 1)
|
||||
sbvalues.Append(", ");
|
||||
count++;
|
||||
}
|
||||
|
||||
return "INSERT INTO {0} ({1}) VALUES ({2})".SFormat(table, sbnames.ToString(), sbvalues.ToString());
|
||||
}
|
||||
public string ReadColumn(string table, List<SqlValue> wheres)
|
||||
{
|
||||
var sbwheres = new StringBuilder();
|
||||
int count = 0;
|
||||
|
||||
foreach (SqlValue where in wheres)
|
||||
{
|
||||
sbwheres.Append(where.Name + "=" + where.Value.ToString());
|
||||
if (count != wheres.Count - 1)
|
||||
sbwheres.Append(" AND ");
|
||||
count++;
|
||||
}
|
||||
|
||||
if (wheres.Count > 0)
|
||||
return "SELECT * FROM {0} WHERE {1}".SFormat(table, sbwheres.ToString());
|
||||
else
|
||||
return "SELECT * FROM {0}".SFormat(table);
|
||||
}
|
||||
|
||||
static readonly Dictionary<MySqlDbType, string> TypesAsStrings = new Dictionary<MySqlDbType, string>
|
||||
{
|
||||
|
|
|
|||
53
TShockAPI/DB/SqlValue.cs
Normal file
53
TShockAPI/DB/SqlValue.cs
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
using System.Data;
|
||||
using MySql.Data.MySqlClient;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace TShockAPI.DB
|
||||
{
|
||||
public class SqlValue
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public object Value { get; set; }
|
||||
|
||||
public SqlValue(string name, object value)
|
||||
{
|
||||
Name = name;
|
||||
Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
public class SqlTableEditor
|
||||
{
|
||||
IDbConnection database;
|
||||
IQueryBuilder creator;
|
||||
|
||||
public SqlTableEditor(IDbConnection db, IQueryBuilder provider)
|
||||
{
|
||||
database = db;
|
||||
creator = provider;
|
||||
}
|
||||
|
||||
public void UpdateValues(string table, List<SqlValue> values, List<SqlValue> wheres)
|
||||
{
|
||||
database.Query(creator.UpdateValue(table, values, wheres));
|
||||
}
|
||||
|
||||
public void InsertValues(string table, List<SqlValue> values)
|
||||
{
|
||||
database.Query(creator.InsertValues(table, values));
|
||||
}
|
||||
|
||||
public List<object> ReadColumn(string table, string column, List<SqlValue> wheres)
|
||||
{
|
||||
List<object> values = new List<object>();
|
||||
|
||||
using (var reader = database.QueryReader(creator.ReadColumn(table, wheres)))
|
||||
{
|
||||
while (reader.Read())
|
||||
values.Add(reader.Reader.Get<object>(column));
|
||||
}
|
||||
|
||||
return values;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -87,6 +87,7 @@ namespace TShockAPI.DB
|
|||
{typeof(decimal), (s, i) => s.GetDecimal(i)},
|
||||
{typeof(float), (s, i) => s.GetFloat(i)},
|
||||
{typeof(double), (s, i) => s.GetDouble(i)},
|
||||
{typeof(object), (s, i) => s.GetValue(i)},
|
||||
};
|
||||
|
||||
public static T Get<T>(this IDataReader reader, string column)
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@
|
|||
<Compile Include="DB\ItemManager.cs" />
|
||||
<Compile Include="DB\SqlColumn.cs" />
|
||||
<Compile Include="DB\SqlTable.cs" />
|
||||
<Compile Include="DB\SqlValue.cs" />
|
||||
<Compile Include="Extensions\DbExt.cs" />
|
||||
<Compile Include="DB\GroupManager.cs" />
|
||||
<Compile Include="DB\UserManager.cs" />
|
||||
|
|
@ -178,7 +179,7 @@
|
|||
</PropertyGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio>
|
||||
<UserProperties BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_StartDate="2011/6/17" BuildVersion_IncrementBeforeBuild="False" />
|
||||
<UserProperties BuildVersion_IncrementBeforeBuild="False" BuildVersion_StartDate="2011/6/17" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_BuildAction="Both" BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" />
|
||||
</VisualStudio>
|
||||
</ProjectExtensions>
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue