Skip to content

Commit 5b20421

Browse files
2881028810
authored andcommitted
Merge branch 'dev_type_mapping'
2 parents 47b2960 + aeee8cc commit 5b20421

File tree

84 files changed

+18920
-987
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+18920
-987
lines changed

FreeSql.Tests/MySql/MapType/BoolNullableTest.cs

Lines changed: 1562 additions & 0 deletions
Large diffs are not rendered by default.

FreeSql.Tests/MySql/MapType/BoolTest.cs

Lines changed: 1096 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
using FreeSql.DataAnnotations;
2+
using System;
3+
using System.Numerics;
4+
using Xunit;
5+
6+
namespace FreeSql.Tests.MySqlMapType {
7+
public class EnumTest {
8+
class EnumTestMap {
9+
public Guid id { get; set; }
10+
11+
[Column(MapType = typeof(string))]
12+
public ToStringMapEnum enum_to_string { get; set; }
13+
[Column(MapType = typeof(string))]
14+
public ToStringMapEnum? enumnullable_to_string { get; set; }
15+
16+
[Column(MapType = typeof(int))]
17+
public ToStringMapEnum enum_to_int { get; set; }
18+
[Column(MapType = typeof(int?))]
19+
public ToStringMapEnum? enumnullable_to_int { get; set; }
20+
}
21+
public enum ToStringMapEnum { 中国人, abc, 香港 }
22+
[Fact]
23+
public void EnumToString() {
24+
//insert
25+
var orm = g.mysql;
26+
var item = new EnumTestMap { };
27+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
28+
var find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).First();
29+
Assert.NotNull(find);
30+
Assert.Equal(item.id, find.id);
31+
Assert.Equal(item.enum_to_string, find.enum_to_string);
32+
Assert.Equal(ToStringMapEnum.中国人, find.enum_to_string);
33+
34+
item = new EnumTestMap { enum_to_string = ToStringMapEnum.abc };
35+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
36+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).First();
37+
Assert.NotNull(find);
38+
Assert.Equal(item.id, find.id);
39+
Assert.Equal(item.enum_to_string, find.enum_to_string);
40+
Assert.Equal(ToStringMapEnum.abc, find.enum_to_string);
41+
42+
//update all
43+
item.enum_to_string = ToStringMapEnum.香港;
44+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
45+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).First();
46+
Assert.NotNull(find);
47+
Assert.Equal(item.id, find.id);
48+
Assert.Equal(item.enum_to_string, find.enum_to_string);
49+
Assert.Equal(ToStringMapEnum.香港, find.enum_to_string);
50+
51+
item.enum_to_string = ToStringMapEnum.中国人;
52+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
53+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).First();
54+
Assert.NotNull(find);
55+
Assert.Equal(item.id, find.id);
56+
Assert.Equal(item.enum_to_string, find.enum_to_string);
57+
Assert.Equal(ToStringMapEnum.中国人, find.enum_to_string);
58+
59+
//update set
60+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enum_to_string, ToStringMapEnum.香港).ExecuteAffrows());
61+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).First();
62+
Assert.NotNull(find);
63+
Assert.Equal(item.id, find.id);
64+
Assert.Equal(ToStringMapEnum.香港, find.enum_to_string);
65+
66+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enum_to_string, ToStringMapEnum.abc).ExecuteAffrows());
67+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).First();
68+
Assert.NotNull(find);
69+
Assert.Equal(item.id, find.id);
70+
Assert.Equal(ToStringMapEnum.abc, find.enum_to_string);
71+
72+
//delete
73+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).ExecuteAffrows());
74+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).ExecuteAffrows());
75+
Assert.Equal(1, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).ExecuteAffrows());
76+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
77+
}
78+
[Fact]
79+
public void EnumNullableToString() {
80+
//insert
81+
var orm = g.mysql;
82+
var item = new EnumTestMap { };
83+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
84+
var find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == null).First();
85+
Assert.NotNull(find);
86+
Assert.Equal(item.id, find.id);
87+
Assert.Equal(item.enumnullable_to_string, find.enumnullable_to_string);
88+
Assert.Null(find.enumnullable_to_string);
89+
90+
item = new EnumTestMap { enumnullable_to_string = ToStringMapEnum.中国人 };
91+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
92+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.中国人).First();
93+
Assert.NotNull(find);
94+
Assert.Equal(item.id, find.id);
95+
Assert.Equal(item.enumnullable_to_string, find.enumnullable_to_string);
96+
Assert.Equal(ToStringMapEnum.中国人, find.enumnullable_to_string);
97+
98+
//update all
99+
item.enumnullable_to_string = ToStringMapEnum.香港;
100+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
101+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.香港).First();
102+
Assert.NotNull(find);
103+
Assert.Equal(item.id, find.id);
104+
Assert.Equal(item.enumnullable_to_string, find.enumnullable_to_string);
105+
Assert.Equal(ToStringMapEnum.香港, find.enumnullable_to_string);
106+
107+
item.enumnullable_to_string = null;
108+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
109+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.香港).First());
110+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == null).First();
111+
Assert.NotNull(find);
112+
Assert.Equal(item.id, find.id);
113+
Assert.Equal(item.enumnullable_to_string, find.enumnullable_to_string);
114+
Assert.Null(find.enumnullable_to_string);
115+
116+
//update set
117+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enumnullable_to_string, ToStringMapEnum.abc).ExecuteAffrows());
118+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.abc).First();
119+
Assert.NotNull(find);
120+
Assert.Equal(item.id, find.id);
121+
Assert.Equal(ToStringMapEnum.abc, find.enumnullable_to_string);
122+
123+
124+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enumnullable_to_string, null).ExecuteAffrows());
125+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.abc).First());
126+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == null).First();
127+
Assert.NotNull(find);
128+
Assert.Equal(item.id, find.id);
129+
Assert.Null(find.enumnullable_to_string);
130+
131+
//delete
132+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.中国人).ExecuteAffrows());
133+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == ToStringMapEnum.香港).ExecuteAffrows());
134+
Assert.Equal(1, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_string == null).ExecuteAffrows());
135+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
136+
}
137+
138+
[Fact]
139+
public void EnumToInt() {
140+
//insert
141+
var orm = g.mysql;
142+
var item = new EnumTestMap { };
143+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
144+
var find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.中国人).First();
145+
Assert.NotNull(find);
146+
Assert.Equal(item.id, find.id);
147+
Assert.Equal(item.enum_to_int, find.enum_to_int);
148+
Assert.Equal(ToStringMapEnum.中国人, find.enum_to_int);
149+
150+
item = new EnumTestMap { enum_to_int = ToStringMapEnum.abc };
151+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
152+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.abc).First();
153+
Assert.NotNull(find);
154+
Assert.Equal(item.id, find.id);
155+
Assert.Equal(item.enum_to_int, find.enum_to_int);
156+
Assert.Equal(ToStringMapEnum.abc, find.enum_to_int);
157+
158+
//update all
159+
item.enum_to_int = ToStringMapEnum.香港;
160+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
161+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.香港).First();
162+
Assert.NotNull(find);
163+
Assert.Equal(item.id, find.id);
164+
Assert.Equal(item.enum_to_int, find.enum_to_int);
165+
Assert.Equal(ToStringMapEnum.香港, find.enum_to_int);
166+
167+
item.enum_to_int = ToStringMapEnum.中国人;
168+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
169+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.中国人).First();
170+
Assert.NotNull(find);
171+
Assert.Equal(item.id, find.id);
172+
Assert.Equal(item.enum_to_int, find.enum_to_int);
173+
Assert.Equal(ToStringMapEnum.中国人, find.enum_to_int);
174+
175+
//update set
176+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enum_to_int, ToStringMapEnum.香港).ExecuteAffrows());
177+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.香港).First();
178+
Assert.NotNull(find);
179+
Assert.Equal(item.id, find.id);
180+
Assert.Equal(ToStringMapEnum.香港, find.enum_to_int);
181+
182+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enum_to_int, ToStringMapEnum.abc).ExecuteAffrows());
183+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.abc).First();
184+
Assert.NotNull(find);
185+
Assert.Equal(item.id, find.id);
186+
Assert.Equal(ToStringMapEnum.abc, find.enum_to_int);
187+
188+
//delete
189+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.中国人).ExecuteAffrows());
190+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.香港).ExecuteAffrows());
191+
Assert.Equal(1, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enum_to_int == ToStringMapEnum.abc).ExecuteAffrows());
192+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
193+
}
194+
[Fact]
195+
public void EnumNullableToInt() {
196+
//insert
197+
var orm = g.mysql;
198+
var item = new EnumTestMap { };
199+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
200+
var find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == null).First();
201+
Assert.NotNull(find);
202+
Assert.Equal(item.id, find.id);
203+
Assert.Equal(item.enumnullable_to_int, find.enumnullable_to_int);
204+
Assert.Null(find.enumnullable_to_int);
205+
206+
item = new EnumTestMap { enumnullable_to_int = ToStringMapEnum.中国人 };
207+
Assert.Equal(1, orm.Insert<EnumTestMap>().AppendData(item).ExecuteAffrows());
208+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.中国人).First();
209+
Assert.NotNull(find);
210+
Assert.Equal(item.id, find.id);
211+
Assert.Equal(item.enumnullable_to_int, find.enumnullable_to_int);
212+
Assert.Equal(ToStringMapEnum.中国人, find.enumnullable_to_int);
213+
214+
//update all
215+
item.enumnullable_to_int = ToStringMapEnum.香港;
216+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
217+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.香港).First();
218+
Assert.NotNull(find);
219+
Assert.Equal(item.id, find.id);
220+
Assert.Equal(item.enumnullable_to_int, find.enumnullable_to_int);
221+
Assert.Equal(ToStringMapEnum.香港, find.enumnullable_to_int);
222+
223+
item.enumnullable_to_int = null;
224+
Assert.Equal(1, orm.Update<EnumTestMap>().SetSource(item).ExecuteAffrows());
225+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.香港).First());
226+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == null).First();
227+
Assert.NotNull(find);
228+
Assert.Equal(item.id, find.id);
229+
Assert.Equal(item.enumnullable_to_int, find.enumnullable_to_int);
230+
Assert.Null(find.enumnullable_to_int);
231+
232+
//update set
233+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enumnullable_to_int, ToStringMapEnum.abc).ExecuteAffrows());
234+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.abc).First();
235+
Assert.NotNull(find);
236+
Assert.Equal(item.id, find.id);
237+
Assert.Equal(ToStringMapEnum.abc, find.enumnullable_to_int);
238+
239+
240+
Assert.Equal(1, orm.Update<EnumTestMap>().Where(a => a.id == item.id).Set(a => a.enumnullable_to_int, null).ExecuteAffrows());
241+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.abc).First());
242+
find = orm.Select<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == null).First();
243+
Assert.NotNull(find);
244+
Assert.Equal(item.id, find.id);
245+
Assert.Null(find.enumnullable_to_int);
246+
247+
//delete
248+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.中国人).ExecuteAffrows());
249+
Assert.Equal(0, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == ToStringMapEnum.香港).ExecuteAffrows());
250+
Assert.Equal(1, orm.Delete<EnumTestMap>().Where(a => a.id == item.id && a.enumnullable_to_int == null).ExecuteAffrows());
251+
Assert.Null(orm.Select<EnumTestMap>().Where(a => a.id == item.id).First());
252+
}
253+
}
254+
}

0 commit comments

Comments
 (0)