Browse Source

add drop table by key

master
jkpete 1 month ago
parent
commit
9181ac94c4
  1. 122
      addons/EGFramework/Module/SaveTools/Data/EGDapper.cs
  2. 12
      addons/EGFramework/Module/SaveTools/EGSave.cs
  3. 3
      addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

122
addons/EGFramework/Module/SaveTools/Data/EGDapper.cs

@ -8,7 +8,7 @@ using Dapper;
//ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection. //ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection.
namespace EGFramework namespace EGFramework
{ {
public abstract class EGDapper : IEGSave, IEGSaveData, IEGCanGetDBConnection,IEGDataBase public abstract class EGDapper : IEGSave, IEGSaveData, IEGCanGetDBConnection, IEGDataBase
{ {
public DbConnection Connection { get; set; } public DbConnection Connection { get; set; }
public string ExceptionMsg; public string ExceptionMsg;
@ -16,42 +16,48 @@ namespace EGFramework
public abstract void InitSave(string conn); public abstract void InitSave(string conn);
public IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new() public IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new()
{ {
IEnumerable<TData> result = Connection.Query<TData>("select * from "+dataKey); IEnumerable<TData> result = Connection.Query<TData>("select * from " + dataKey);
return result; return result;
} }
public IEnumerable<TData> GetPage<TData>(string dataKey, int pageIndex, int pageSize) where TData : new() public IEnumerable<TData> GetPage<TData>(string dataKey, int pageIndex, int pageSize) where TData : new()
{ {
if(pageIndex <= 0){ if (pageIndex <= 0)
{
pageIndex = 1; pageIndex = 1;
} }
int startPointer = (pageIndex - 1) * pageSize; int startPointer = (pageIndex - 1) * pageSize;
IEnumerable<TData> result = Connection.Query<TData>("select * from "+dataKey+" limit "+startPointer+","+pageSize); IEnumerable<TData> result = Connection.Query<TData>("select * from " + dataKey + " limit " + startPointer + "," + pageSize);
return result; return result;
} }
public TData GetData<TData>(string dataKey, object id) where TData : new() public TData GetData<TData>(string dataKey, object id) where TData : new()
{ {
TData result = Connection.QuerySingle<TData>("select * from "+dataKey+" where ID = @ID",new {ID = id}); TData result = Connection.QuerySingle<TData>("select * from " + dataKey + " where ID = @ID", new { ID = id });
return result; return result;
} }
public IEnumerable<TData> FindData<TData>(string dataKey, Expression<Func<TData, bool>> expression) where TData : new() public IEnumerable<TData> FindData<TData>(string dataKey, Expression<Func<TData, bool>> expression) where TData : new()
{ {
IEnumerable<TData> sourceList = Connection.Query<TData>("select * from "+dataKey); IEnumerable<TData> sourceList = Connection.Query<TData>("select * from " + dataKey);
return sourceList.Where(expression.Compile()); return sourceList.Where(expression.Compile());
} }
public void SetData<TData>(string dataKey, TData data, object id) public void SetData<TData>(string dataKey, TData data, object id)
{ {
if(data == null) if (data == null)
{ {
throw new ArgumentNullException(nameof(data)); throw new ArgumentNullException(nameof(data));
}else{ }
if(this.ContainsData(dataKey,id)){ else
UpdateData(dataKey,data,id); {
}else{ if (this.ContainsData(dataKey, id))
AddData(dataKey,data); {
UpdateData(dataKey, data, id);
}
else
{
AddData(dataKey, data);
} }
//EG.Print("data:" + data); //EG.Print("data:" + data);
} }
@ -59,7 +65,7 @@ namespace EGFramework
public void AddData<TData>(string dataKey, TData data) public void AddData<TData>(string dataKey, TData data)
{ {
if(data == null) if (data == null)
{ {
throw new ArgumentNullException(nameof(data)); throw new ArgumentNullException(nameof(data));
} }
@ -68,13 +74,14 @@ namespace EGFramework
var properties = DataType.GetProperties(); var properties = DataType.GetProperties();
string keySet = ""; string keySet = "";
string keySetParam = ""; string keySetParam = "";
foreach(PropertyInfo key in properties){ foreach (PropertyInfo key in properties)
{
keySet += key.Name + ","; keySet += key.Name + ",";
keySetParam += "@" + key.Name + ","; keySetParam += "@" + key.Name + ",";
} }
keySet = keySet.TrimEnd(','); keySet = keySet.TrimEnd(',');
keySetParam = keySetParam.TrimEnd(','); keySetParam = keySetParam.TrimEnd(',');
int count = Connection.Execute(@"insert "+dataKey+"("+keySet+") values("+keySetParam+")",data); int count = Connection.Execute(@"insert " + dataKey + "(" + keySet + ") values(" + keySetParam + ")", data);
//EG.Print("count:" + count); //EG.Print("count:" + count);
} }
@ -84,26 +91,29 @@ namespace EGFramework
var properties = DataType.GetProperties(); var properties = DataType.GetProperties();
string keySet = ""; string keySet = "";
string keySetParam = ""; string keySetParam = "";
foreach(PropertyInfo key in properties){ foreach (PropertyInfo key in properties)
{
keySet += key.Name + ","; keySet += key.Name + ",";
keySetParam += "@" + key.Name + ","; keySetParam += "@" + key.Name + ",";
} }
keySet = keySet.TrimEnd(','); keySet = keySet.TrimEnd(',');
keySetParam = keySetParam.TrimEnd(','); keySetParam = keySetParam.TrimEnd(',');
string sql = @"insert "+dataKey+"("+keySet+") values("+keySetParam+")"; string sql = @"insert " + dataKey + "(" + keySet + ") values(" + keySetParam + ")";
int count = Connection.Execute(sql,data); int count = Connection.Execute(sql, data);
//EG.Print("count:" + count); //EG.Print("count:" + count);
} }
public void AddData(string dataKey,Dictionary<string, object> data) public void AddData(string dataKey, Dictionary<string, object> data)
{ {
if(data == null) if (data == null)
{ {
throw new ArgumentNullException(nameof(data)); throw new ArgumentNullException(nameof(data));
} }
string keySet = ""; string keySet = "";
string keySetParam = ""; string keySetParam = "";
foreach(KeyValuePair<string,object> param in data){ foreach (KeyValuePair<string, object> param in data)
if (param.Key == "ID" || param.Key == "Id" || param.Key == "id"){ {
if (param.Key == "ID" || param.Key == "Id" || param.Key == "id")
{
continue; continue;
} }
keySet += param.Key + ","; keySet += param.Key + ",";
@ -118,8 +128,8 @@ namespace EGFramework
} }
keySet = keySet.TrimEnd(','); keySet = keySet.TrimEnd(',');
keySetParam = keySetParam.TrimEnd(','); keySetParam = keySetParam.TrimEnd(',');
EG.Print("insert into "+dataKey+"("+keySet+") values("+keySetParam+")"); EG.Print("insert into " + dataKey + "(" + keySet + ") values(" + keySetParam + ")");
int count = Connection.Execute("insert into "+dataKey+"("+keySet+") values("+keySetParam+")"); int count = Connection.Execute("insert into " + dataKey + "(" + keySet + ") values(" + keySetParam + ")");
} }
public int RemoveData(string dataKey, object id) public int RemoveData(string dataKey, object id)
@ -131,23 +141,25 @@ namespace EGFramework
public void UpdateData<TData>(string dataKey, TData data, object id) public void UpdateData<TData>(string dataKey, TData data, object id)
{ {
if(data == null) if (data == null)
{ {
throw new ArgumentNullException(nameof(data)); throw new ArgumentNullException(nameof(data));
} }
Type DataType = typeof(TData); Type DataType = typeof(TData);
var properties = DataType.GetProperties(); var properties = DataType.GetProperties();
string keyMap = ""; string keyMap = "";
foreach(PropertyInfo key in properties){ foreach (PropertyInfo key in properties)
if(key.Name=="ID" || key.Name == "id" || key.Name == "Id"){ {
if (key.Name == "ID" || key.Name == "id" || key.Name == "Id")
{
continue; continue;
} }
keyMap += key.Name + " = @"+key.Name +","; keyMap += key.Name + " = @" + key.Name + ",";
} }
keyMap = keyMap.TrimEnd(','); keyMap = keyMap.TrimEnd(',');
string sql = @"update "+dataKey+" set "+ keyMap +" where ID = " + id; string sql = @"update " + dataKey + " set " + keyMap + " where ID = " + id;
EG.Print(sql); EG.Print(sql);
int count = Connection.Execute(sql,data); int count = Connection.Execute(sql, data);
//EG.Print("count:" + count); //EG.Print("count:" + count);
} }
@ -158,17 +170,19 @@ namespace EGFramework
throw new ArgumentNullException(nameof(data)); throw new ArgumentNullException(nameof(data));
} }
string keyMap = ""; string keyMap = "";
foreach (KeyValuePair<string, object> param in data) { foreach (KeyValuePair<string, object> param in data)
if (param.Key == "ID" || param.Key == "Id" || param.Key == "id"){ {
if (param.Key == "ID" || param.Key == "Id" || param.Key == "id")
{
continue; continue;
} }
if (param.Value is string) if (param.Value is string)
{ {
keyMap += param.Key + " = '"+param.Value +"',"; keyMap += param.Key + " = '" + param.Value + "',";
} }
else else
{ {
keyMap += param.Key + " = "+param.Value +","; keyMap += param.Key + " = " + param.Value + ",";
} }
} }
keyMap = keyMap.TrimEnd(','); keyMap = keyMap.TrimEnd(',');
@ -176,9 +190,9 @@ namespace EGFramework
{ {
id = "'" + id + "'"; id = "'" + id + "'";
} }
string sql = @"update "+dataKey+" set "+ keyMap +" where ID = " + id; string sql = @"update " + dataKey + " set " + keyMap + " where ID = " + id;
EG.Print(sql); EG.Print(sql);
int count = Connection.Execute(sql,data); int count = Connection.Execute(sql, data);
} }
public IEnumerable<string> GetKeys() public IEnumerable<string> GetKeys()
@ -196,10 +210,13 @@ namespace EGFramework
{ {
try try
{ {
var result = Connection.QuerySingle("select * from "+dataKey+" where ID = @ID",new {ID = id}); var result = Connection.QuerySingle("select * from " + dataKey + " where ID = @ID", new { ID = id });
if(result == null){ if (result == null)
{
return false; return false;
}else{ }
else
{
return true; return true;
} }
} }
@ -225,16 +242,35 @@ namespace EGFramework
// throw new System.NotImplementedException(); // throw new System.NotImplementedException();
if (this.ContainsKey(dataKey)) if (this.ContainsKey(dataKey))
{ {
//Drop table if has. EG.Print("Table " + dataKey + " has been created!");
Connection.Execute(@"DROP TABLE IF EXISTS "+dataKey+""); return;
} }
string createSql = typeof(TData).ToCreateTableSQL(dataKey); string createSql = typeof(TData).ToCreateTableSQL(dataKey);
int count = Connection.Execute(createSql); int count = Connection.Execute(createSql);
} }
public void CreateTable(string dataKey,Dictionary<string, object> tableParam) public void CreateTable(string dataKey, Dictionary<string, object> tableParam)
{
if (this.ContainsKey(dataKey))
{
EG.Print("Table " + dataKey + " has been created!");
return;
}
Dictionary<string, Type> tableType = new Dictionary<string, Type>();
foreach (KeyValuePair<string, object> pair in tableParam)
{ {
throw new NotImplementedException(); tableType.Add(pair.Key, pair.Value.GetType());
}
string createSql = tableType.ToCreateTableSQL(dataKey);
int count = Connection.Execute(createSql);
}
public void DropTable(string dataKey)
{
if (this.ContainsKey(dataKey))
{
Connection.Execute(@"DROP TABLE IF EXISTS "+dataKey+"");
}
} }
} }
} }

12
addons/EGFramework/Module/SaveTools/EGSave.cs

@ -36,7 +36,7 @@ namespace EGFramework
LoadObjectFile<EGJsonSave>("SaveData/DefaultJsonSave.json"); LoadObjectFile<EGJsonSave>("SaveData/DefaultJsonSave.json");
} }
#region Load Data or Object and Unload #region Load Data or Object and Unload
public IEGSaveData LoadDataFile<TSaveData>(string path) where TSaveData : IEGSaveData, IEGSave, new() public TSaveData LoadDataFile<TSaveData>(string path) where TSaveData : IEGSaveData, IEGSave, new()
{ {
TSaveData saveData = new TSaveData(); TSaveData saveData = new TSaveData();
saveData.InitSave(path); saveData.InitSave(path);
@ -51,7 +51,7 @@ namespace EGFramework
return saveData; return saveData;
} }
public IEGSaveDataReadOnly ReadData<TReadOnlyData>(string key, string data) where TReadOnlyData : IEGSaveDataReadOnly, IEGSaveReadOnly, new() public TReadOnlyData ReadData<TReadOnlyData>(string key, string data) where TReadOnlyData : IEGSaveDataReadOnly, IEGSaveReadOnly, new()
{ {
TReadOnlyData readOnlyData = new TReadOnlyData(); TReadOnlyData readOnlyData = new TReadOnlyData();
readOnlyData.InitReadOnly(data); readOnlyData.InitReadOnly(data);
@ -66,7 +66,7 @@ namespace EGFramework
return readOnlyData; return readOnlyData;
} }
public IEGSaveDataReadOnly ReadData<TReadOnlyData>(string key, byte[] data) where TReadOnlyData : IEGSaveDataReadOnly, IEGSaveReadOnly, new() public TReadOnlyData ReadData<TReadOnlyData>(string key, byte[] data) where TReadOnlyData : IEGSaveDataReadOnly, IEGSaveReadOnly, new()
{ {
TReadOnlyData readOnlyData = new TReadOnlyData(); TReadOnlyData readOnlyData = new TReadOnlyData();
readOnlyData.InitReadOnly(data); readOnlyData.InitReadOnly(data);
@ -81,7 +81,7 @@ namespace EGFramework
return readOnlyData; return readOnlyData;
} }
public IEGSaveObject LoadObjectFile<TSaveObject>(string path) where TSaveObject:IEGSaveObject,IEGSave,new(){ public TSaveObject LoadObjectFile<TSaveObject>(string path) where TSaveObject:IEGSaveObject,IEGSave,new(){
TSaveObject saveObject = new TSaveObject(); TSaveObject saveObject = new TSaveObject();
saveObject.InitSave(path); saveObject.InitSave(path);
if(!ObjectFiles.ContainsKey(path)){ if(!ObjectFiles.ContainsKey(path)){
@ -92,7 +92,7 @@ namespace EGFramework
return saveObject; return saveObject;
} }
public IEGSaveObjectReadOnly ReadObject<TReadOnlyObject>(string key, string data) where TReadOnlyObject : IEGSaveObjectReadOnly, IEGSaveReadOnly, new() public TReadOnlyObject ReadObject<TReadOnlyObject>(string key, string data) where TReadOnlyObject : IEGSaveObjectReadOnly, IEGSaveReadOnly, new()
{ {
TReadOnlyObject readOnlyObject = new TReadOnlyObject(); TReadOnlyObject readOnlyObject = new TReadOnlyObject();
readOnlyObject.InitReadOnly(data); readOnlyObject.InitReadOnly(data);
@ -107,7 +107,7 @@ namespace EGFramework
return readOnlyObject; return readOnlyObject;
} }
public IEGSaveObjectReadOnly ReadObject<TReadOnlyObject>(string key,byte[] data) where TReadOnlyObject:IEGSaveObjectReadOnly,IEGSaveReadOnly,new(){ public TReadOnlyObject ReadObject<TReadOnlyObject>(string key,byte[] data) where TReadOnlyObject:IEGSaveObjectReadOnly,IEGSaveReadOnly,new(){
TReadOnlyObject readOnlyObject = new TReadOnlyObject(); TReadOnlyObject readOnlyObject = new TReadOnlyObject();
readOnlyObject.InitReadOnly(data); readOnlyObject.InitReadOnly(data);
if(!ObjectReadOnly.ContainsKey(key)){ if(!ObjectReadOnly.ContainsKey(key)){

3
addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

@ -36,7 +36,8 @@ namespace EGFramework
public interface IEGDataBase : IEGCanGetDBConnection public interface IEGDataBase : IEGCanGetDBConnection
{ {
void CreateTable<TData>(string dataKey); void CreateTable<TData>(string dataKey);
void CreateTable(string dataKey,Dictionary<string, object> tableParam); void CreateTable(string dataKey, Dictionary<string, object> tableParam);
void DropTable(string dataKey);
} }
#endregion #endregion

Loading…
Cancel
Save