-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathDBMapper.cs
150 lines (132 loc) · 4.54 KB
/
DBMapper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System;
using System.Collections.Generic;
using UnityEngine;
namespace UnityORM
{
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<T> (object key) where T : class
{
var desc = Registory.GetClassDesc<T> ();
var result = database.ExecuteQuery (
SQLMaker.GenerateSelectSQL<T> (desc, key));
T[] r = ResultReader.Get<T> (result, desc);
if (r.Length > 0)
{
return r [0];
}
else
{
return null;
}
}
public T[] ReadAll<T> ()
{
var desc = Registory.GetClassDesc<T> ();
return Read<T> ("SELECT * FROM " + desc.Name);
}
public T[] Read<T> (string sql)
{
var result = database.ExecuteQuery (sql);
var desc = Registory.GetClassDesc<T> ();
return ResultReader.Get<T> (result, desc);
}
public int ReadTo<T> (T[] objects, string sql)
{
return ReadTo<T> (objects, 0, objects.Length, sql);
}
public int ReadTo<T> (T[] objects, int offset, int size, string sql)
{
var result = database.ExecuteQuery (sql);
ClassDesc desc = Registory.GetClassDesc<T> ();
return ResultReader.SetTo (result, 0, desc, objects, offset, size);
}
/// <summary>
/// Delete all record then insert.
///
/// </summary>
/// <param name='objects'>
/// Objects.
/// </param>
/// <typeparam name='T'>
/// The 1st type parameter.
/// </typeparam>
public void ReplaceAll<T> (T[] objects)
{
var desc = Registory.GetClassDesc<T> ();
string delete = SQLMaker.GenerateDeleteAllSQL<T> (desc);
database.ExecuteNonQuery (delete);
foreach (T obj in objects)
{
string insert = SQLMaker.GenerateInsertSQL (desc, obj);
database.ExecuteNonQuery (insert);
}
}
public void UpdateAll<T> (T[] objects)
{
var desc = Registory.GetClassDesc<T> ();
foreach (T obj in objects)
{
string update = SQLMaker.GenerateUpdateSQL (desc, obj);
database.ExecuteNonQuery (update);
}
}
public void InsertAll<T> (T[] objects)
{
var desc = Registory.GetClassDesc<T> ();
foreach (T obj in objects)
{
string insert = SQLMaker.GenerateInsertSQL (desc, obj);
database.ExecuteNonQuery (insert);
}
}
public void UpdateOrInsertAll<T> (T[] objects)
{
foreach (T obj in objects)
{
UpdateOrInsert<T> (obj);
}
}
public void UpdateOrInsert<T> (T obj)
{
var desc = Registory.GetClassDesc<T> ();
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<T> ()
{
var desc = Registory.GetClassDesc<T> ();
database.ExecuteNonQuery (SQLMaker.GenerateDeleteAllSQL<T> (desc));
}
public void DeleteByKey<T> (object key)
{
var desc = Registory.GetClassDesc<T> ();
database.ExecuteNonQuery (SQLMaker.GenerateDeleteSQL<T> (desc, key));
}
}
}