From bfc25c2c19c7f68058b9ddadb6ea6eda797f8d7e Mon Sep 17 00:00:00 2001 From: shinriyo Date: Sat, 24 May 2014 21:33:45 +0900 Subject: [PATCH] cleaned up code Escape is not public so I fix as private. GenerateInsertSQL method's foreach ran twice. I united it. --- Assets/Output/SQLMaker.cs | 267 +++++++++++++++++++++----------------- 1 file changed, 151 insertions(+), 116 deletions(-) diff --git a/Assets/Output/SQLMaker.cs b/Assets/Output/SQLMaker.cs index cc664f5..4a5bffd 100644 --- a/Assets/Output/SQLMaker.cs +++ b/Assets/Output/SQLMaker.cs @@ -2,122 +2,157 @@ using System.Text; using System.Collections.Generic; - namespace UnityORM { - public class SQLMaker - { - - public readonly static DateTime UnixTime = new DateTime(1970,1,1); - - public SQLMaker () - { - } - - public string GenerateCreateTableSQL(ClassDesc desc){ - - var builder = new StringBuilder(); - builder.Append("CREATE TABLE IF NOT EXISTS " + desc.Name + "("); - foreach(var f in desc.FieldDescs){ - builder.Append(f.NameInTable + " " + ConvertToSQLType(f.FieldType )); - if(f == desc.KeyField){ - builder.Append(" PRIMARY KEY"); - } - if( desc.AutoIncrement){ - builder.Append(" AUTOINCREMENT"); - } - builder.Append(","); - } - builder.Remove(builder.Length - 1,1); - builder.Append(");"); - return builder.ToString(); - } - string ConvertToSQLType(Type t){ - if(t == typeof(int) || - t == typeof(long)){ - return "INTEGER"; - }else if(t == typeof(double)){ - return "FLOAT"; - }else if(t == typeof(byte[])){ - return "BLOB"; - }else if(t == typeof(DateTime)){ - return "INTEGER"; - }else{ - return "TEXT"; - } - } - - public string GenerateSelectAllSQL(ClassDesc desc){ - return "SELECT * FROM " + desc.Name + ";"; - } - - public string GenerateSelectSQL(ClassDesc desc,object key){ - if(desc.KeyField == null) throw new Exception("Class " + desc.Name + " hasn't key field"); - return "SELECT * FROM " + desc.Name + " WHERE " + desc.KeyField.NameInTable + " = " + ValueToBlock(key) + ";"; - } - - public string GenerateDeleteAllSQL(ClassDesc desc){ - return "DELETE FROM " + desc.Name + ";"; - } - public string GenerateDeleteSQL(ClassDesc desc,object key){ - if(desc.KeyField == null) throw new Exception("Class " + desc.Name + " hasn't key field"); - return "DELETE FROM " + desc.Name + " WHERE " + desc.KeyField.NameInTable + " = " + ValueToBlock(key) + ";"; - } - - public string GenerateInsertSQL(ClassDesc desc,T obj){ - var builder = new StringBuilder(); - builder.Append("INSERT INTO " + desc.Name + " ("); - - var fields = desc.FieldDescs; - if(desc.AutoIncrement){ - fields = new List(fields); - fields.Remove(desc.KeyField); - } - - foreach( var f in fields){ - builder.Append(f.NameInTable + ","); - } - builder.Remove(builder.Length - 1,1); - builder.Append(") VALUES ("); - - foreach( var f in fields){ - object v = f.GetForDb(obj); - builder.Append(ValueToBlock(v) + ","); - } - builder.Remove(builder.Length - 1,1); - builder.Append(");"); - - return builder.ToString(); - } - - public string GenerateUpdateSQL(ClassDesc desc,T obj){ - if(desc.KeyField == null) throw new Exception("Class " + desc.Name + " hasn't key field"); - var builder = new StringBuilder(); - builder.Append("UPDATE " + desc.Name + " SET "); - foreach(var f in desc.FieldDescs){ - object v = f.GetForDb(obj); - builder.Append(f.NameInTable + "=" + ValueToBlock(v) + ","); - } - builder.Remove(builder.Length -1 ,1); - builder.Append(" WHERE " + desc.KeyField.NameInTable + " = " + ValueToBlock(desc.KeyField.GetForDb(obj)) + ";"); - - return builder.ToString(); - } - - - string ValueToBlock(object v){ - if(v == null){ - return "NULL"; - }else{ - return "'" + Escape(v.ToString()) + "'"; - } - } - - public string Escape(string str){ - return str.Replace("'","''"); - } - - - } -} + public class SQLMaker + { + public readonly static DateTime UnixTime = new DateTime (1970, 1, 1); + + public SQLMaker () + { + } + + public string GenerateCreateTableSQL (ClassDesc desc) + { + var builder = new StringBuilder (); + builder.Append ("CREATE TABLE IF NOT EXISTS " + desc.Name + "("); + foreach (var f in desc.FieldDescs) + { + builder.Append (f.nameInTable + " " + ConvertToSQLType (f.FieldType)); + if (f == desc.KeyField) + { + builder.Append (" PRIMARY KEY"); + } + if (desc.AutoIncrement) + { + builder.Append (" AUTOINCREMENT"); + } + builder.Append (","); + } + builder.Remove (builder.Length - 1, 1); + builder.Append (");"); + return builder.ToString (); + } + + private string ConvertToSQLType (Type t) + { + if (t == typeof(int) || + t == typeof(long)) + { + return "INTEGER"; + } + else if (t == typeof(double)) + { + return "FLOAT"; + } + else if (t == typeof(byte[])) + { + return "BLOB"; + } + else if (t == typeof(DateTime)) + { + return "INTEGER"; + } + else + { + return "TEXT"; + } + } + + public string GenerateSelectAllSQL (ClassDesc desc) + { + return "SELECT * FROM " + desc.Name + ";"; + } + + public string GenerateSelectSQL (ClassDesc desc, object key) + { + if (desc.KeyField == null) + { + throw new Exception ("Class " + desc.Name + " hasn't key field"); + } + return "SELECT * FROM " + desc.Name + " WHERE " + desc.KeyField.nameInTable + " = " + ValueToBlock (key) + ";"; + } + + public string GenerateDeleteAllSQL (ClassDesc desc) + { + return "DELETE FROM " + desc.Name + ";"; + } + + public string GenerateDeleteSQL (ClassDesc desc, object key) + { + if (desc.KeyField == null) + { + throw new Exception ("Class " + desc.Name + " hasn't key field"); + } + return "DELETE FROM " + desc.Name + " WHERE " + desc.KeyField.nameInTable + " = " + ValueToBlock (key) + ";"; + } + public string GenerateInsertSQL (ClassDesc desc, T obj) + { + var columnsBuilder = new StringBuilder (); + var valuesBuilder = new StringBuilder (); + columnsBuilder.Append ("INSERT INTO " + desc.Name + " ("); + + var fields = desc.FieldDescs; + if (desc.AutoIncrement) + { + fields = new List (fields); + fields.Remove (desc.KeyField); + } + + foreach (var f in fields) + { + // columns + columnsBuilder.Append (f.nameInTable + ","); + // values + object v = f.GetForDb (obj); + valuesBuilder.Append (ValueToBlock (v) + ","); + } + + columnsBuilder.Remove (columnsBuilder.Length - 1, 1); + columnsBuilder.Append (") VALUES ("); + + valuesBuilder.Remove (valuesBuilder.Length - 1, 1); + valuesBuilder.Append (");"); + columnsBuilder.Append (valuesBuilder); + + return columnsBuilder.ToString (); + } + + public string GenerateUpdateSQL (ClassDesc desc, T obj) + { + if (desc.KeyField == null) + { + throw new Exception ("Class " + desc.Name + " hasn't key field"); + } + var builder = new StringBuilder (); + builder.Append ("UPDATE " + desc.Name + " SET "); + foreach (var f in desc.FieldDescs) + { + object v = f.GetForDb (obj); + builder.Append (f.nameInTable + "=" + ValueToBlock (v) + ","); + } + builder.Remove (builder.Length - 1, 1); + builder.Append (" WHERE " + desc.KeyField.nameInTable + " = " + ValueToBlock (desc.KeyField.GetForDb (obj)) + ";"); + + return builder.ToString (); + } + + private string ValueToBlock (object v) + { + if (v == null) + { + return "NULL"; + } + else + { + return "'" + Escape (v.ToString ()) + "'"; + } + } + + private string Escape (string str) + { + return str.Replace ("'", "''"); + } + } +}