diff --git a/Assets/Output/DBMapper.cs b/Assets/Output/DBMapper.cs index 76bfe9e..345401d 100644 --- a/Assets/Output/DBMapper.cs +++ b/Assets/Output/DBMapper.cs @@ -1,132 +1,150 @@ using System; - using System.Collections.Generic; using UnityEngine; namespace UnityORM { - public class DBMapper - { - SqliteDatabase database; - public SQLResultReader ResultReader = new SQLResultReader(); - public ClassDescRepository Registory = ClassDescRepository.Instance; - public SQLMaker SQLMaker = new SQLMaker(); - - public SqliteDatabase Database{get{return database;}} - - public DBMapper (SqliteDatabase database) - { - this.database = database; - } - - public T ReadByKey(object key) where T : class{ - var desc = Registory.GetClassDesc(); - var result = database.ExecuteQuery( - SQLMaker.GenerateSelectSQL(desc,key)); - T[] r = ResultReader.Get(result,desc); - if(r.Length > 0){ - return r[0]; - }else{ - return null; - } - } - - public T[] ReadAll(){ - var desc = Registory.GetClassDesc(); - return Read("SELECT * FROM " + desc.Name); - } - - public T[] Read(string sql) { - var result = database.ExecuteQuery(sql); - var desc = Registory.GetClassDesc(); - return ResultReader.Get(result,desc); - } - - public int ReadTo(T[] objects,string sql){ - return ReadTo(objects,0,objects.Length,sql); - } - - public int ReadTo(T[] objects,int offset,int size,string sql){ - var result = database.ExecuteQuery(sql); - - ClassDesc desc = Registory.GetClassDesc(); - - return ResultReader.SetTo(result,0,desc,objects,offset,size); - } - - /// - /// Delete all record then insert. - /// - /// - /// - /// Objects. - /// - /// - /// The 1st type parameter. - /// - public void ReplaceAll(T[] objects){ - var desc = Registory.GetClassDesc(); - string delete = SQLMaker.GenerateDeleteAllSQL(desc); - database.ExecuteNonQuery(delete); - - foreach(T obj in objects){ - string insert = SQLMaker.GenerateInsertSQL(desc,obj); - database.ExecuteNonQuery(insert); - } - } - - public void UpdateAll(T[] objects){ - var desc = Registory.GetClassDesc(); - foreach(T obj in objects){ - string update = SQLMaker.GenerateUpdateSQL(desc,obj); - database.ExecuteNonQuery(update); - } - } - public void InsertAll(T[] objects){ - var desc = Registory.GetClassDesc(); - foreach(T obj in objects){ - string insert = SQLMaker.GenerateInsertSQL(desc,obj); - database.ExecuteNonQuery(insert); - } - } - public void UpdateOrInsertAll(T[] objects){ - foreach(T obj in objects){ - UpdateOrInsert(obj); - } - } - - public void UpdateOrInsert(T obj){ - var desc = Registory.GetClassDesc(); - string update = SQLMaker.GenerateUpdateSQL(desc,obj); - try{ - int effectedRows = database.ExecuteNonQuery(update); - if(effectedRows == 0){ - Debug.Log("No updates.Insert!"); - string insert = SQLMaker.GenerateInsertSQL(desc,obj); - int r2 = database.ExecuteNonQuery(insert); - Debug.Log("ResultCode = " + r2); - } - }catch(SqliteException e){ - Debug.Log("Fail to update.Insert!"); - string insert = SQLMaker.GenerateInsertSQL(desc,obj); - database.ExecuteNonQuery(insert); - } - } - - public void DeleteAll(){ - var desc = Registory.GetClassDesc(); - database.ExecuteNonQuery(SQLMaker.GenerateDeleteAllSQL(desc)); - } - - public void DeleteByKey(object key){ - var desc = Registory.GetClassDesc(); - database.ExecuteNonQuery(SQLMaker.GenerateDeleteSQL(desc,key)); - } - - - - - - } -} + public class DBMapper + { + private SqliteDatabase database; + public SQLResultReader ResultReader = new SQLResultReader (); + public ClassDescRepository Registory = ClassDescRepository.Instance; + public SQLMaker SQLMaker = new SQLMaker (); + + public SqliteDatabase Database{ get { return database; } } + + public DBMapper (SqliteDatabase database) + { + this.database = database; + } + + public T ReadByKey (object key) where T : class + { + var desc = Registory.GetClassDesc (); + var result = database.ExecuteQuery ( + SQLMaker.GenerateSelectSQL (desc, key)); + T[] r = ResultReader.Get (result, desc); + if (r.Length > 0) + { + return r [0]; + } + else + { + return null; + } + } + + public T[] ReadAll () + { + var desc = Registory.GetClassDesc (); + return Read ("SELECT * FROM " + desc.Name); + } + + public T[] Read (string sql) + { + var result = database.ExecuteQuery (sql); + var desc = Registory.GetClassDesc (); + return ResultReader.Get (result, desc); + } + + public int ReadTo (T[] objects, string sql) + { + return ReadTo (objects, 0, objects.Length, sql); + } + public int ReadTo (T[] objects, int offset, int size, string sql) + { + var result = database.ExecuteQuery (sql); + + ClassDesc desc = Registory.GetClassDesc (); + + return ResultReader.SetTo (result, 0, desc, objects, offset, size); + } + + /// + /// Delete all record then insert. + /// + /// + /// + /// Objects. + /// + /// + /// The 1st type parameter. + /// + public void ReplaceAll (T[] objects) + { + var desc = Registory.GetClassDesc (); + string delete = SQLMaker.GenerateDeleteAllSQL (desc); + database.ExecuteNonQuery (delete); + + foreach (T obj in objects) + { + string insert = SQLMaker.GenerateInsertSQL (desc, obj); + database.ExecuteNonQuery (insert); + } + } + + public void UpdateAll (T[] objects) + { + var desc = Registory.GetClassDesc (); + foreach (T obj in objects) + { + string update = SQLMaker.GenerateUpdateSQL (desc, obj); + database.ExecuteNonQuery (update); + } + } + + public void InsertAll (T[] objects) + { + var desc = Registory.GetClassDesc (); + foreach (T obj in objects) + { + string insert = SQLMaker.GenerateInsertSQL (desc, obj); + database.ExecuteNonQuery (insert); + } + } + + public void UpdateOrInsertAll (T[] objects) + { + foreach (T obj in objects) + { + UpdateOrInsert (obj); + } + } + + public void UpdateOrInsert (T obj) + { + var desc = Registory.GetClassDesc (); + string update = SQLMaker.GenerateUpdateSQL (desc, obj); + try + { + int effectedRows = database.ExecuteNonQuery (update); + if (effectedRows == 0) + { + Debug.Log ("No updates.Insert!"); + string insert = SQLMaker.GenerateInsertSQL (desc, obj); + int r2 = database.ExecuteNonQuery (insert); + Debug.Log ("ResultCode = " + r2); + } + } + catch (SqliteException e) + { + Debug.LogError ("Fail to update.Insert!" + e.Message); + string insert = SQLMaker.GenerateInsertSQL (desc, obj); + database.ExecuteNonQuery (insert); + } + } + + public void DeleteAll () + { + var desc = Registory.GetClassDesc (); + database.ExecuteNonQuery (SQLMaker.GenerateDeleteAllSQL (desc)); + } + + public void DeleteByKey (object key) + { + var desc = Registory.GetClassDesc (); + database.ExecuteNonQuery (SQLMaker.GenerateDeleteSQL (desc, key)); + } + } +}