1
1
using System . Linq ;
2
2
using NUnit . Framework ;
3
+ using ServiceStack . DataAnnotations ;
3
4
4
5
namespace ServiceStack . OrmLite . MySql . Tests
5
6
{
@@ -35,6 +36,36 @@ public void CanGetEnumValue()
35
36
}
36
37
}
37
38
39
+ [ Test ]
40
+ public void CanCreateTableNullableEnum ( )
41
+ {
42
+ OpenDbConnection ( ) . CreateTable < TypeWithNullableEnum > ( true ) ;
43
+ }
44
+
45
+ [ Test ]
46
+ public void CanStoreNullableEnumValue ( )
47
+ {
48
+ using ( var con = OpenDbConnection ( ) )
49
+ {
50
+ con . CreateTable < TypeWithNullableEnum > ( true ) ;
51
+ con . Save ( new TypeWithNullableEnum { Id = 1 , EnumValue = SomeEnum . Value1 } ) ;
52
+ }
53
+ }
54
+
55
+ [ Test ]
56
+ public void CanGetNullableEnumValue ( )
57
+ {
58
+ using ( var con = OpenDbConnection ( ) )
59
+ {
60
+ con . CreateTable < TypeWithNullableEnum > ( true ) ;
61
+ var obj = new TypeWithNullableEnum { Id = 1 , EnumValue = SomeEnum . Value1 } ;
62
+ con . Save ( obj ) ;
63
+ var target = con . SingleById < TypeWithNullableEnum > ( obj . Id ) ;
64
+ Assert . AreEqual ( obj . Id , target . Id ) ;
65
+ Assert . AreEqual ( obj . EnumValue , target . EnumValue ) ;
66
+ }
67
+ }
68
+
38
69
[ Test ]
39
70
public void CanQueryByEnumValue_using_select_with_expression ( )
40
71
{
@@ -82,6 +113,72 @@ public void CanQueryByEnumValue_using_where_with_AnonType()
82
113
Assert . AreEqual ( 2 , target . Count ( ) ) ;
83
114
}
84
115
}
116
+
117
+ [ Test ]
118
+ public void CanQueryByNullableEnumValue_using_where_with_AnonType ( )
119
+ {
120
+ using ( var con = OpenDbConnection ( ) )
121
+ {
122
+ con . CreateTable < TypeWithEnum > ( true ) ;
123
+ con . Save ( new TypeWithNullableEnum { Id = 1 , EnumValue = SomeEnum . Value1 , IntEnum = SomeIntEnum . One } ) ;
124
+ con . Save ( new TypeWithNullableEnum { Id = 2 , EnumValue = SomeEnum . Value1 , IntEnum = SomeIntEnum . One } ) ;
125
+ con . Save ( new TypeWithNullableEnum { Id = 3 , EnumValue = SomeEnum . Value2 , IntEnum = SomeIntEnum . Two } ) ;
126
+
127
+ var target = con . Where < TypeWithNullableEnum > ( new { EnumValue = SomeEnum . Value1 } ) ;
128
+ var enumInt = con . Where < TypeWithNullableEnum > ( new { IntEnum = SomeIntEnum . One } ) ;
129
+
130
+ Assert . AreEqual ( 2 , target . Count ) ;
131
+ Assert . AreEqual ( 2 , enumInt . Count ) ;
132
+ }
133
+ }
134
+
135
+ [ Test ]
136
+ public void CanSaveNullableEnum_with_specific_id_select_with_anon_type ( )
137
+ {
138
+ using ( var con = OpenDbConnection ( ) )
139
+ {
140
+ con . CreateTableIfNotExists < MyObj > ( ) ;
141
+ var myObj = new MyObj ( ) ;
142
+ myObj . Id = 1 ;
143
+ myObj . Test = MyEnum . One ;
144
+ con . Insert ( myObj ) ;
145
+
146
+ myObj = con . Single < MyObj > ( new { Id = 1 } ) ;
147
+
148
+ Assert . That ( myObj . Id , Is . EqualTo ( 1 ) ) ;
149
+ Assert . That ( myObj . Test , Is . Not . EqualTo ( null ) ) ;
150
+ Assert . That ( myObj . Test , Is . EqualTo ( MyEnum . One ) ) ;
151
+ }
152
+ }
153
+
154
+ [ Test ]
155
+ public void CanSaveNullableEnum_with_specific_id_select_with_type ( )
156
+ {
157
+ using ( var existsCon = OpenDbConnection ( ) )
158
+ {
159
+ existsCon . CreateTableIfNotExists < MyObj > ( ) ;
160
+ var exists = existsCon . SingleById < MyObj > ( 1 ) ;
161
+ if ( exists != null )
162
+ {
163
+ existsCon . DeleteById < MyObj > ( 1 ) ;
164
+ }
165
+ }
166
+
167
+ using ( var con = OpenDbConnection ( ) )
168
+ {
169
+
170
+ var myObj = new MyObj ( ) ;
171
+ myObj . Id = 1 ;
172
+ myObj . Test = MyEnum . One ;
173
+ con . Insert ( myObj ) ;
174
+
175
+ myObj = con . Single < MyObj > ( x => x . Id == 1 ) ;
176
+
177
+ Assert . That ( myObj . Id , Is . EqualTo ( 1 ) ) ;
178
+ Assert . That ( myObj . Test , Is . Not . EqualTo ( null ) ) ;
179
+ Assert . That ( myObj . Test , Is . EqualTo ( MyEnum . One ) ) ;
180
+ }
181
+ }
85
182
}
86
183
87
184
public enum SomeEnum : long
@@ -91,9 +188,38 @@ public enum SomeEnum : long
91
188
Value3
92
189
}
93
190
191
+ [ EnumAsInt ]
192
+ public enum SomeIntEnum
193
+ {
194
+ Zero = 0 ,
195
+ One = 1 ,
196
+ Two = 2
197
+ }
198
+
199
+ [ EnumAsInt ]
200
+ public enum MyEnum : int
201
+ {
202
+ Zero = 0 ,
203
+ One = 1
204
+ }
205
+
206
+ public class MyObj
207
+ {
208
+ public int Id { get ; set ; }
209
+ public MyEnum ? Test { get ; set ; }
210
+ }
211
+
94
212
public class TypeWithEnum
95
213
{
96
214
public int Id { get ; set ; }
97
- public SomeEnum EnumValue { get ; set ; }
215
+ public SomeEnum EnumValue { get ; set ; }
216
+ public SomeIntEnum IntEnum { get ; set ; }
217
+ }
218
+
219
+ public class TypeWithNullableEnum
220
+ {
221
+ public int Id { get ; set ; }
222
+ public SomeEnum ? EnumValue { get ; set ; }
223
+ public SomeIntEnum ? IntEnum { get ; set ; }
98
224
}
99
225
}
0 commit comments