11
11
using System ;
12
12
using System . Data ;
13
13
using System . Linq ;
14
+ using System . Linq . Expressions ;
14
15
using NHibernate . Cfg ;
15
- using NHibernate . SqlTypes ;
16
+ using NHibernate . Linq ;
16
17
using NHibernate . Mapping . ByCode ;
17
- using NUnit . Framework ;
18
+ using NHibernate . SqlTypes ;
18
19
using NHibernate . Type ;
19
- using NHibernate . Linq ;
20
- using System . Linq . Expressions ;
20
+ using NUnit . Framework ;
21
21
22
22
namespace NHibernate . Test . Linq
23
23
{
@@ -27,7 +27,6 @@ namespace NHibernate.Test.Linq
27
27
public class DateTimeTestsAsync : TestCase
28
28
{
29
29
private bool DialectSupportsDateTimeOffset => TestDialect . SupportsSqlType ( new SqlType ( DbType . DateTimeOffset ) ) ;
30
- private bool DialectSupportsDateTimeWithScale => TestDialect . SupportsSqlType ( new SqlType ( DbType . DateTime , ( byte ) 2 ) ) ;
31
30
private readonly DateTimeTestsClass [ ] _referenceEntities =
32
31
[
33
32
new ( ) { Id = 1 , DateTimeValue = new DateTime ( 1998 , 02 , 26 ) } ,
@@ -40,6 +39,8 @@ public class DateTimeTestsAsync : TestCase
40
39
new ( ) { Id = 8 , DateTimeValue = new DateTime ( 2000 , 01 , 01 ) }
41
40
] ;
42
41
42
+ private TimeSpan FractionalSecondsAdded => TimeSpan . FromMilliseconds ( 900 ) ;
43
+
43
44
protected override string [ ] Mappings => default ;
44
45
protected override void AddMappings ( Configuration configuration )
45
46
{
@@ -68,30 +69,26 @@ protected override void OnSetUp()
68
69
foreach ( var entity in _referenceEntities )
69
70
{
70
71
entity . DateValue = entity . DateTimeValue . Date ;
71
- entity . DateTimeValueWithScale = entity . DateTimeValue . AddSeconds ( 0.9 ) ;
72
+ entity . DateTimeValueWithScale = entity . DateTimeValue + FractionalSecondsAdded ;
72
73
entity . DateTimeOffsetValue = new DateTimeOffset ( entity . DateTimeValue , TimeSpan . FromHours ( 3 ) ) ;
73
- entity . DateTimeOffsetValueWithScale = new DateTimeOffset ( entity . DateTimeValue , TimeSpan . FromHours ( 3 ) ) ;
74
+ entity . DateTimeOffsetValueWithScale = new DateTimeOffset ( entity . DateTimeValueWithScale , TimeSpan . FromHours ( 3 ) ) ;
74
75
}
75
76
76
- using ( var session = OpenSession ( ) )
77
- using ( var trans = session . BeginTransaction ( ) )
77
+ using var session = OpenSession ( ) ;
78
+ using var trans = session . BeginTransaction ( ) ;
79
+ foreach ( var entity in _referenceEntities )
78
80
{
79
- foreach ( var entity in _referenceEntities )
80
- {
81
- session . Save ( entity ) ;
82
- }
83
- trans . Commit ( ) ;
81
+ session . Save ( entity ) ;
84
82
}
83
+ trans . Commit ( ) ;
85
84
}
86
85
87
86
protected override void OnTearDown ( )
88
87
{
89
- using ( var session = OpenSession ( ) )
90
- using ( var trans = session . BeginTransaction ( ) )
91
- {
92
- session . Query < DateTimeTestsClass > ( ) . Delete ( ) ;
93
- trans . Commit ( ) ;
94
- }
88
+ using var session = OpenSession ( ) ;
89
+ using var trans = session . BeginTransaction ( ) ;
90
+ session . Query < DateTimeTestsClass > ( ) . Delete ( ) ;
91
+ trans . Commit ( ) ;
95
92
}
96
93
97
94
private void AssertDateTimeOffsetSupported ( )
@@ -102,22 +99,22 @@ private void AssertDateTimeOffsetSupported()
102
99
}
103
100
}
104
101
105
- private async Task AssertDateTimeWithScaleSupportedAsync ( CancellationToken cancellationToken = default ( CancellationToken ) )
102
+ private async Task AssertDateTimeWithFractionalSecondsSupportedAsync ( CancellationToken cancellationToken = default ( CancellationToken ) )
106
103
{
107
- if ( ! DialectSupportsDateTimeWithScale )
104
+ //Ideally, the dialect should know whether this is supported or not
105
+ if ( ! TestDialect . SupportsDateTimeWithFractionalSeconds )
108
106
{
109
- Assert . Ignore ( "Dialect doesn't support DateTime with scale (2) " ) ;
107
+ Assert . Ignore ( "Dialect doesn't support DateTime with factional seconds " ) ;
110
108
}
111
- using ( var session = OpenSession ( ) )
112
- using ( var trans = session . BeginTransaction ( ) )
109
+
110
+ //But it sometimes doesn't
111
+ using var session = OpenSession ( ) ;
112
+ using var trans = session . BeginTransaction ( ) ;
113
+ var entity1 = await ( session . GetAsync < DateTimeTestsClass > ( _referenceEntities [ 0 ] . Id , cancellationToken ) ) ;
114
+ if ( entity1 . DateTimeValueWithScale != entity1 . DateTimeValue + FractionalSecondsAdded )
113
115
{
114
- var entity1 = await ( session . GetAsync < DateTimeTestsClass > ( _referenceEntities [ 0 ] . Id , cancellationToken ) ) ;
115
- if ( entity1 . DateTimeValueWithScale != entity1 . DateTimeValue . AddSeconds ( 0.9 ) )
116
- {
117
- Assert . Ignore ( "Current setup doesn't support DateTime with scale (2)" ) ;
118
- }
116
+ Assert . Ignore ( "Current setup doesn't support DateTime with scale (2)" ) ;
119
117
}
120
-
121
118
}
122
119
123
120
private Task AssertQueryAsync ( Expression < Func < DateTimeTestsClass , bool > > where , CancellationToken cancellationToken = default ( CancellationToken ) ) => AssertQueryAsync ( where , x => x . Id , cancellationToken ) ;
@@ -159,7 +156,7 @@ public async Task CanQueryDateTimeByHourAsync()
159
156
[ Test ]
160
157
public async Task CanQueryDateTimeBySecondWhenValueContainsFractionalSecondsAsync ( )
161
158
{
162
- await ( AssertDateTimeWithScaleSupportedAsync ( ) ) ;
159
+ await ( AssertDateTimeWithFractionalSecondsSupportedAsync ( ) ) ;
163
160
await ( AssertQueryAsync ( o => o . DateTimeValueWithScale . Second == 4 ) ) ;
164
161
}
165
162
@@ -236,7 +233,7 @@ public async Task CanSelectDateTime2Async()
236
233
[ Test ]
237
234
public async Task CanSelectDateTimeWithScaleAsync ( )
238
235
{
239
- await ( AssertDateTimeWithScaleSupportedAsync ( ) ) ;
236
+ await ( AssertDateTimeWithFractionalSecondsSupportedAsync ( ) ) ;
240
237
await ( AssertQueryAsync ( o => o . DateTimeValueWithScale == _referenceEntities [ 0 ] . DateTimeValueWithScale , o => o . DateTimeValueWithScale ) ) ;
241
238
}
242
239
0 commit comments