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 CreateTable(SqlTable table);
|
||||||
string AlterTable(SqlTable from, SqlTable to);
|
string AlterTable(SqlTable from, SqlTable to);
|
||||||
string DbTypeToString(MySqlDbType type, int? length);
|
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
|
public class SqliteQueryCreator : IQueryBuilder
|
||||||
|
|
@ -44,9 +47,79 @@ namespace TShockAPI.DB
|
||||||
CREATE TABLE "main"."Bans" ("IP" TEXT PRIMARY KEY ,"Name" TEXT)
|
CREATE TABLE "main"."Bans" ("IP" TEXT PRIMARY KEY ,"Name" TEXT)
|
||||||
INSERT INTO "main"."Bans" SELECT "IP","Name" FROM "main"."oXHFcGcd04oXHFcGcd04_Bans"
|
INSERT INTO "main"."Bans" SELECT "IP","Name" FROM "main"."oXHFcGcd04oXHFcGcd04_Bans"
|
||||||
DROP TABLE "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>
|
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);
|
var drop = "DROP TABLE {0}_{1}".SFormat(rstr, from.Name);
|
||||||
return "{0}; {1}; {2}; {3};".SFormat(alter, create, insert, drop);
|
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>
|
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(decimal), (s, i) => s.GetDecimal(i)},
|
||||||
{typeof(float), (s, i) => s.GetFloat(i)},
|
{typeof(float), (s, i) => s.GetFloat(i)},
|
||||||
{typeof(double), (s, i) => s.GetDouble(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)
|
public static T Get<T>(this IDataReader reader, string column)
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@
|
||||||
<Compile Include="DB\ItemManager.cs" />
|
<Compile Include="DB\ItemManager.cs" />
|
||||||
<Compile Include="DB\SqlColumn.cs" />
|
<Compile Include="DB\SqlColumn.cs" />
|
||||||
<Compile Include="DB\SqlTable.cs" />
|
<Compile Include="DB\SqlTable.cs" />
|
||||||
|
<Compile Include="DB\SqlValue.cs" />
|
||||||
<Compile Include="Extensions\DbExt.cs" />
|
<Compile Include="Extensions\DbExt.cs" />
|
||||||
<Compile Include="DB\GroupManager.cs" />
|
<Compile Include="DB\GroupManager.cs" />
|
||||||
<Compile Include="DB\UserManager.cs" />
|
<Compile Include="DB\UserManager.cs" />
|
||||||
|
|
@ -178,7 +179,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<VisualStudio>
|
<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>
|
</VisualStudio>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- 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