1111using System ;
1212using System . Data ;
1313using System . Linq ;
14+ using System . Linq . Expressions ;
1415using NHibernate . Cfg ;
15- using NHibernate . SqlTypes ;
16+ using NHibernate . Linq ;
1617using NHibernate . Mapping . ByCode ;
17- using NUnit . Framework ;
18+ using NHibernate . SqlTypes ;
1819using NHibernate . Type ;
19- using NHibernate . Linq ;
20- using System . Linq . Expressions ;
20+ using NUnit . Framework ;
2121
2222namespace NHibernate . Test . Linq
2323{
@@ -27,7 +27,6 @@ namespace NHibernate.Test.Linq
2727 public class DateTimeTestsAsync : TestCase
2828 {
2929 private bool DialectSupportsDateTimeOffset => TestDialect . SupportsSqlType ( new SqlType ( DbType . DateTimeOffset ) ) ;
30- private bool DialectSupportsDateTimeWithScale => TestDialect . SupportsSqlType ( new SqlType ( DbType . DateTime , ( byte ) 2 ) ) ;
3130 private readonly DateTimeTestsClass [ ] _referenceEntities =
3231 [
3332 new ( ) { Id = 1 , DateTimeValue = new DateTime ( 1998 , 02 , 26 ) } ,
@@ -40,6 +39,8 @@ public class DateTimeTestsAsync : TestCase
4039 new ( ) { Id = 8 , DateTimeValue = new DateTime ( 2000 , 01 , 01 ) }
4140 ] ;
4241
42+ private TimeSpan FractionalSecondsAdded => TimeSpan . FromMilliseconds ( 900 ) ;
43+
4344 protected override string [ ] Mappings => default ;
4445 protected override void AddMappings ( Configuration configuration )
4546 {
@@ -68,30 +69,26 @@ protected override void OnSetUp()
6869 foreach ( var entity in _referenceEntities )
6970 {
7071 entity . DateValue = entity . DateTimeValue . Date ;
71- entity . DateTimeValueWithScale = entity . DateTimeValue . AddSeconds ( 0.9 ) ;
72+ entity . DateTimeValueWithScale = entity . DateTimeValue + FractionalSecondsAdded ;
7273 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 ) ) ;
7475 }
7576
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 )
7880 {
79- foreach ( var entity in _referenceEntities )
80- {
81- session . Save ( entity ) ;
82- }
83- trans . Commit ( ) ;
81+ session . Save ( entity ) ;
8482 }
83+ trans . Commit ( ) ;
8584 }
8685
8786 protected override void OnTearDown ( )
8887 {
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 ( ) ;
9592 }
9693
9794 private void AssertDateTimeOffsetSupported ( )
@@ -102,22 +99,22 @@ private void AssertDateTimeOffsetSupported()
10299 }
103100 }
104101
105- private async Task AssertDateTimeWithScaleSupportedAsync ( CancellationToken cancellationToken = default ( CancellationToken ) )
102+ private async Task AssertDateTimeWithFractionalSecondsSupportedAsync ( CancellationToken cancellationToken = default ( CancellationToken ) )
106103 {
107- if ( ! DialectSupportsDateTimeWithScale )
104+ //Ideally, the dialect should know whether this is supported or not
105+ if ( ! TestDialect . SupportsDateTimeWithFractionalSeconds )
108106 {
109- Assert . Ignore ( "Dialect doesn't support DateTime with scale (2) " ) ;
107+ Assert . Ignore ( "Dialect doesn't support DateTime with factional seconds " ) ;
110108 }
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 )
113115 {
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)" ) ;
119117 }
120-
121118 }
122119
123120 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()
159156 [ Test ]
160157 public async Task CanQueryDateTimeBySecondWhenValueContainsFractionalSecondsAsync ( )
161158 {
162- await ( AssertDateTimeWithScaleSupportedAsync ( ) ) ;
159+ await ( AssertDateTimeWithFractionalSecondsSupportedAsync ( ) ) ;
163160 await ( AssertQueryAsync ( o => o . DateTimeValueWithScale . Second == 4 ) ) ;
164161 }
165162
@@ -236,7 +233,7 @@ public async Task CanSelectDateTime2Async()
236233 [ Test ]
237234 public async Task CanSelectDateTimeWithScaleAsync ( )
238235 {
239- await ( AssertDateTimeWithScaleSupportedAsync ( ) ) ;
236+ await ( AssertDateTimeWithFractionalSecondsSupportedAsync ( ) ) ;
240237 await ( AssertQueryAsync ( o => o . DateTimeValueWithScale == _referenceEntities [ 0 ] . DateTimeValueWithScale , o => o . DateTimeValueWithScale ) ) ;
241238 }
242239
0 commit comments