Skip to content

Commit a83bcb2

Browse files
fredericDelaportehazzik
authored andcommitted
NH-3919 - Handle date and time scale.
1 parent d7b30a5 commit a83bcb2

File tree

67 files changed

+2493
-343
lines changed

Some content is hidden

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

67 files changed

+2493
-343
lines changed

src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs

+39-11
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ public virtual async Task SaveUseExpectedSqlTypeAsync()
247247
}
248248

249249
// 2 properties + revision
250-
AssertSqlType(driver, 3);
250+
AssertSqlType(driver, 3, true);
251251
}
252252

253253
[Test]
@@ -266,7 +266,7 @@ public virtual async Task UpdateUseExpectedSqlTypeAsync()
266266
}
267267

268268
// 2 properties + revision x 2 (check + update)
269-
AssertSqlType(driver, 4);
269+
AssertSqlType(driver, 4, true);
270270
}
271271

272272
[Test]
@@ -296,41 +296,65 @@ public virtual async Task QueryUseExpectedSqlTypeAsync()
296296
await (t.CommitAsync());
297297
}
298298

299-
AssertSqlType(driver, 5);
299+
AssertSqlType(driver, 5, false);
300+
301+
using (var s = OpenSession())
302+
using (var t = s.BeginTransaction())
303+
{
304+
var q = s
305+
.CreateQuery(
306+
"from DateTimeClass d where d.Value = :value and " +
307+
"d.NullableValue = :nullableValue and " +
308+
"d.Revision = :revision and " +
309+
":other1 = :other2")
310+
.SetParameter("value", Now, Type)
311+
.SetParameter("nullableValue", Now, Type)
312+
.SetParameter("revision", Now, Type)
313+
.SetParameter("other1", Now, Type)
314+
.SetParameter("other2", Now, Type);
315+
driver.ClearStats();
316+
await (q.ListAsync<DateTimeClass>());
317+
await (t.CommitAsync());
318+
}
319+
320+
AssertSqlType(driver, 5, true);
300321
}
301322

302-
private void AssertSqlType(ClientDriverWithParamsStats driver, int expectedCount)
323+
private void AssertSqlType(ClientDriverWithParamsStats driver, int expectedCount, bool exactType)
303324
{
304-
if (Type.SqlTypes(Sfi).Any(t => Equals(t, SqlTypeFactory.DateTime2)))
325+
var typeSqlTypes = Type.SqlTypes(Sfi);
326+
if (typeSqlTypes.Any(t => t is DateTime2SqlType))
305327
{
328+
var expectedType = exactType ? typeSqlTypes.First(t => t is DateTime2SqlType) : SqlTypeFactory.DateTime2;
306329
Assert.That(
307330
driver.GetCount(SqlTypeFactory.DateTime),
308331
Is.EqualTo(0),
309332
"Found unexpected SqlTypeFactory.DateTime usages.");
310333
Assert.That(
311-
driver.GetCount(SqlTypeFactory.DateTime2),
334+
driver.GetCount(expectedType),
312335
Is.EqualTo(expectedCount),
313336
"Unexpected SqlTypeFactory.DateTime2 usage count.");
314337
Assert.That(driver.GetCount(DbType.DateTime), Is.EqualTo(0), "Found unexpected DbType.DateTime usages.");
315338
Assert.That(
316-
driver.GetCount(DbType.DateTime2),
339+
driver.GetCount(expectedType),
317340
Is.EqualTo(expectedCount),
318341
"Unexpected DbType.DateTime2 usage count.");
319342
}
320-
else if (Type.SqlTypes(Sfi).Any(t => Equals(t, SqlTypeFactory.DateTime)))
343+
else if (typeSqlTypes.Any(t => t is DateTimeSqlType))
321344
{
345+
var expectedType = exactType ? typeSqlTypes.First(t => t is DateTimeSqlType) : SqlTypeFactory.DateTime;
322346
Assert.That(
323347
driver.GetCount(SqlTypeFactory.DateTime2),
324348
Is.EqualTo(0),
325349
"Found unexpected SqlTypeFactory.DateTime2 usages.");
326350
Assert.That(
327-
driver.GetCount(SqlTypeFactory.DateTime),
351+
driver.GetCount(expectedType),
328352
Is.EqualTo(expectedCount),
329353
"Unexpected SqlTypeFactory.DateTime usage count.");
330354
Assert.That(driver.GetCount(DbType.DateTime2), Is.EqualTo(0), "Found unexpected DbType.DateTime2 usages.");
331-
Assert.That(driver.GetCount(DbType.DateTime), Is.EqualTo(expectedCount), "Unexpected DbType.DateTime usage count.");
355+
Assert.That(driver.GetCount(expectedType), Is.EqualTo(expectedCount), "Unexpected DbType.DateTime usage count.");
332356
}
333-
else if (Type.SqlTypes(Sfi).Any(t => Equals(t, SqlTypeFactory.Date)))
357+
else if (typeSqlTypes.Any(t => Equals(t, SqlTypeFactory.Date)))
334358
{
335359
Assert.That(
336360
driver.GetCount(SqlTypeFactory.DateTime),
@@ -343,6 +367,10 @@ private void AssertSqlType(ClientDriverWithParamsStats driver, int expectedCount
343367
Assert.That(driver.GetCount(DbType.DateTime), Is.EqualTo(0), "Found unexpected DbType.DateTime usages.");
344368
Assert.That(driver.GetCount(DbType.Date), Is.EqualTo(expectedCount), "Unexpected DbType.Date usage count.");
345369
}
370+
else
371+
{
372+
Assert.Ignore("Test does not involve tested types");
373+
}
346374
}
347375

348376
protected virtual long DateAccuracyInTicks => Dialect.TimestampResolutionInTicks;

src/NHibernate.Test/Async/TypesTest/DateTime2TypeFixture.cs

+27-18
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,44 @@
99

1010

1111
using System;
12+
using NHibernate.Driver;
13+
using NHibernate.SqlTypes;
1214
using NHibernate.Type;
1315
using NUnit.Framework;
1416

1517
namespace NHibernate.Test.TypesTest
1618
{
1719
using System.Threading.Tasks;
18-
using System.Threading;
1920
/// <summary>
2021
/// TestFixtures for the <see cref="DateTimeType"/>.
2122
/// </summary>
2223
[TestFixture]
2324
[Obsolete]
24-
public class DateTime2TypeFixtureAsync
25+
public class DateTime2TypeFixtureAsync : AbstractDateTimeTypeFixtureAsync
2526
{
26-
[Test]
27-
public async Task NextAsync()
28-
{
29-
var type = NHibernateUtil.DateTime2;
30-
object current = DateTime.Now.AddMilliseconds(-1);
31-
object next = await (type.NextAsync(current, null, CancellationToken.None));
32-
33-
Assert.That(next, Is.TypeOf<DateTime>().And.GreaterThan(current));
34-
}
35-
36-
[Test]
37-
public async Task SeedAsync()
38-
{
39-
var type = NHibernateUtil.DateTime2;
40-
Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is DateTime, "seed should be DateTime");
41-
}
27+
protected override bool AppliesTo(Dialect.Dialect dialect) =>
28+
TestDialect.SupportsSqlType(SqlTypeFactory.DateTime2);
29+
30+
protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) =>
31+
// Cannot handle DbType.DateTime2 via .Net ODBC.
32+
!(factory.ConnectionProvider.Driver is OdbcDriver);
33+
34+
protected override string TypeName => "DateTime2";
35+
protected override AbstractDateTimeType Type => NHibernateUtil.DateTime2;
36+
}
37+
38+
[TestFixture]
39+
[Obsolete]
40+
public class DateTime2TypeWithScaleFixtureAsync : DateTimeTypeWithScaleFixtureAsync
41+
{
42+
protected override bool AppliesTo(Dialect.Dialect dialect) =>
43+
TestDialect.SupportsSqlType(SqlTypeFactory.DateTime2);
44+
45+
protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) =>
46+
// Cannot handle DbType.DateTime2 via .Net ODBC.
47+
!(factory.ConnectionProvider.Driver is OdbcDriver);
48+
49+
protected override string TypeName => "DateTime2WithScale";
50+
protected override AbstractDateTimeType Type => (AbstractDateTimeType)TypeFactory.GetDateTime2Type(3);
4251
}
4352
}

0 commit comments

Comments
 (0)