9
9
10
10
11
11
using System ;
12
+ using System . Collections . Generic ;
13
+ using System . Data ;
14
+ using System . Data . Common ;
15
+ using System . Linq ;
16
+ using NHibernate . Cfg ;
17
+ using NHibernate . Driver ;
18
+ using NHibernate . Engine ;
19
+ using NHibernate . SqlCommand ;
20
+ using NHibernate . SqlTypes ;
21
+ using NHibernate . Tool . hbm2ddl ;
12
22
using NHibernate . Type ;
23
+ using NHibernate . Util ;
13
24
using NUnit . Framework ;
14
25
15
26
namespace NHibernate . Test . TypesTest
@@ -25,20 +36,183 @@ public class DateTimeTypeFixtureAsync
25
36
[ Test ]
26
37
public async Task NextAsync ( )
27
38
{
28
- DateTimeType type = ( DateTimeType ) NHibernateUtil . DateTime ;
39
+ var type = NHibernateUtil . DateTime ;
29
40
object current = DateTime . Parse ( "2004-01-01" ) ;
30
41
object next = await ( type . NextAsync ( current , null , CancellationToken . None ) ) ;
31
42
32
43
Assert . IsTrue ( next is DateTime , "Next should be DateTime" ) ;
33
- Assert . IsTrue ( ( DateTime ) next > ( DateTime ) current ,
34
- "next should be greater than current (could be equal depending on how quickly this occurs)" ) ;
44
+ Assert . IsTrue (
45
+ ( DateTime ) next > ( DateTime ) current ,
46
+ "next should be greater than current (could be equal depending on how quickly this occurs)" ) ;
35
47
}
36
48
37
49
[ Test ]
38
50
public async Task SeedAsync ( )
39
51
{
40
- DateTimeType type = ( DateTimeType ) NHibernateUtil . DateTime ;
52
+ var type = NHibernateUtil . DateTime ;
41
53
Assert . IsTrue ( await ( type . SeedAsync ( null , CancellationToken . None ) ) is DateTime , "seed should be DateTime" ) ;
42
54
}
43
55
}
44
- }
56
+
57
+ [ TestFixture ]
58
+ public class DateTimeSqlTypeFixtureAsync : TypeFixtureBase
59
+ {
60
+ protected override string TypeName => "DateTime" ;
61
+ private const int _dateId = 1 ;
62
+
63
+ protected override void Configure ( Configuration configuration )
64
+ {
65
+ base . Configure ( configuration ) ;
66
+
67
+ var driverClass = ReflectHelper . ClassForName ( configuration . GetProperty ( Cfg . Environment . ConnectionDriver ) ) ;
68
+ ClientDriverWithParamsStats . DriverClass = driverClass ;
69
+
70
+ configuration . SetProperty (
71
+ Cfg . Environment . ConnectionDriver ,
72
+ typeof ( ClientDriverWithParamsStats ) . AssemblyQualifiedName ) ;
73
+ }
74
+
75
+ protected override void OnSetUp ( )
76
+ {
77
+ base . OnSetUp ( ) ;
78
+
79
+ using ( var s = OpenSession ( ) )
80
+ using ( var t = s . BeginTransaction ( ) )
81
+ {
82
+ var d = new DateTimeClass
83
+ {
84
+ Id = _dateId ,
85
+ LocalDateTimeValue = DateTime . Now . AddDays ( - 1 ) ,
86
+ UtcDateTimeValue = DateTime . UtcNow . AddDays ( - 1 ) ,
87
+ NormalDateTimeValue = DateTime . Now . AddDays ( - 1 )
88
+ } ;
89
+ s . Save ( d ) ;
90
+ t . Commit ( ) ;
91
+ }
92
+ }
93
+
94
+ protected override void OnTearDown ( )
95
+ {
96
+ base . OnTearDown ( ) ;
97
+
98
+ using ( var s = OpenSession ( ) )
99
+ using ( var t = s . BeginTransaction ( ) )
100
+ {
101
+ s . CreateQuery ( "delete from DateTimeClass" ) . ExecuteUpdate ( ) ;
102
+ t . Commit ( ) ;
103
+ }
104
+ }
105
+
106
+ [ Test ]
107
+ public Task DbHasExpectedTypeAsync ( )
108
+ {
109
+ try
110
+ {
111
+ var validator = new SchemaValidator ( cfg ) ;
112
+ return validator . ValidateAsync ( ) ;
113
+ }
114
+ catch ( Exception ex )
115
+ {
116
+ return Task . FromException < object > ( ex ) ;
117
+ }
118
+ }
119
+
120
+ [ Test ]
121
+ public async Task SaveUseExpectedSqlTypeAsync ( )
122
+ {
123
+ var driver = ( ClientDriverWithParamsStats ) Sfi . ConnectionProvider . Driver ;
124
+
125
+ using ( var s = OpenSession ( ) )
126
+ using ( var t = s . BeginTransaction ( ) )
127
+ {
128
+ var d = new DateTimeClass
129
+ {
130
+ Id = 2 ,
131
+ LocalDateTimeValue = DateTime . Now ,
132
+ UtcDateTimeValue = DateTime . UtcNow ,
133
+ NormalDateTimeValue = DateTime . Now
134
+ } ;
135
+ driver . ClearStats ( ) ;
136
+ await ( s . SaveAsync ( d ) ) ;
137
+ await ( t . CommitAsync ( ) ) ;
138
+ }
139
+
140
+ AssertSqlType ( driver ) ;
141
+ }
142
+
143
+ [ Test ]
144
+ public async Task UpdateUseExpectedSqlTypeAsync ( )
145
+ {
146
+ var driver = ( ClientDriverWithParamsStats ) Sfi . ConnectionProvider . Driver ;
147
+
148
+ using ( var s = OpenSession ( ) )
149
+ using ( var t = s . BeginTransaction ( ) )
150
+ {
151
+ var d = await ( s . GetAsync < DateTimeClass > ( _dateId ) ) ;
152
+ d . LocalDateTimeValue = DateTime . Now ;
153
+ d . UtcDateTimeValue = DateTime . UtcNow ;
154
+ d . NormalDateTimeValue = DateTime . Now ;
155
+ driver . ClearStats ( ) ;
156
+ await ( t . CommitAsync ( ) ) ;
157
+ }
158
+
159
+ AssertSqlType ( driver ) ;
160
+ }
161
+
162
+ [ Test ]
163
+ public async Task QueryUseExpectedSqlTypeAsync ( )
164
+ {
165
+ var driver = ( ClientDriverWithParamsStats ) Sfi . ConnectionProvider . Driver ;
166
+
167
+ using ( var s = OpenSession ( ) )
168
+ using ( var t = s . BeginTransaction ( ) )
169
+ {
170
+ var q = s
171
+ . CreateQuery (
172
+ "from DateTimeClass d where d.LocalDateTimeValue = :local and " +
173
+ "d.UtcDateTimeValue = :utc and d.NormalDateTimeValue = :normal and " +
174
+ ":other1 = :other2" )
175
+ . SetDateTime ( "local" , DateTime . Now )
176
+ . SetDateTime ( "utc" , DateTime . UtcNow )
177
+ . SetDateTime ( "normal" , DateTime . Now )
178
+ . SetDateTime ( "other1" , DateTime . Now )
179
+ . SetDateTime ( "other2" , DateTime . Now ) ;
180
+ driver . ClearStats ( ) ;
181
+ await ( q . ListAsync < DateTimeClass > ( ) ) ;
182
+ await ( t . CommitAsync ( ) ) ;
183
+ }
184
+
185
+ AssertSqlType ( driver ) ;
186
+ }
187
+
188
+ private void AssertSqlType ( ClientDriverWithParamsStats driver )
189
+ {
190
+ if ( NHibernateUtil . DateTime . SqlTypes ( Sfi ) . Any ( t => Equals ( t , SqlTypeFactory . DateTime2 ) ) )
191
+ {
192
+ Assert . That (
193
+ driver . GetCount ( SqlTypeFactory . DateTime ) ,
194
+ Is . EqualTo ( 0 ) ,
195
+ "Found unexpected SqlTypeFactory.DateTime usages." ) ;
196
+ Assert . That (
197
+ driver . GetCount ( SqlTypeFactory . DateTime2 ) ,
198
+ Is . GreaterThan ( 0 ) ,
199
+ "Missing SqlTypeFactory.DateTime2 usages." ) ;
200
+ Assert . That ( driver . GetCount ( DbType . DateTime ) , Is . EqualTo ( 0 ) , "Found unexpected DbType.DateTime usages." ) ;
201
+ Assert . That ( driver . GetCount ( DbType . DateTime2 ) , Is . GreaterThan ( 0 ) , "Missing DbType.DateTime2 usages." ) ;
202
+ }
203
+ else
204
+ {
205
+ Assert . That (
206
+ driver . GetCount ( SqlTypeFactory . DateTime2 ) ,
207
+ Is . EqualTo ( 0 ) ,
208
+ "Found unexpected SqlTypeFactory.DateTime2 usages." ) ;
209
+ Assert . That (
210
+ driver . GetCount ( SqlTypeFactory . DateTime ) ,
211
+ Is . GreaterThan ( 0 ) ,
212
+ "Missing SqlTypeFactory.DateTime usages." ) ;
213
+ Assert . That ( driver . GetCount ( DbType . DateTime2 ) , Is . EqualTo ( 0 ) , "Found unexpected DbType.DateTime2 usages." ) ;
214
+ Assert . That ( driver . GetCount ( DbType . DateTime ) , Is . GreaterThan ( 0 ) , "Missing DbType.DateTime usages." ) ;
215
+ }
216
+ }
217
+ }
218
+ }
0 commit comments