Skip to content

Commit 7ac0206

Browse files
fredericDelaportehazzik
authored andcommitted
NH-3919 - Obsolete TimestampType, check DateTime Kind
1 parent 72aaccb commit 7ac0206

Some content is hidden

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

41 files changed

+336
-163
lines changed

src/NHibernate.Test/Async/Legacy/SQLLoaderTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public async Task TSAsync()
6060
await (session.SaveAsync(sim, 1L));
6161
IQuery q = session.CreateSQLQuery("select {sim.*} from Simple {sim} where {sim}.date_ = ?")
6262
.AddEntity("sim", typeof(Simple));
63-
q.SetTimestamp(0, sim.Date);
63+
q.SetDateTime(0, sim.Date);
6464
Assert.AreEqual(1, (await (q.ListAsync())).Count, "q.List.Count");
6565
await (session.DeleteAsync(sim));
6666
await (txn.CommitAsync());
@@ -84,7 +84,7 @@ public async Task TSNamedAsync()
8484
IQuery q =
8585
session.CreateSQLQuery("select {sim.*} from Simple {sim} where {sim}.date_ = :fred")
8686
.AddEntity("sim", typeof(Simple));
87-
q.SetTimestamp("fred", sim.Date);
87+
q.SetDateTime("fred", sim.Date);
8888
Assert.AreEqual(1, (await (q.ListAsync())).Count, "q.List.Count");
8989
await (session.DeleteAsync(sim));
9090
await (txn.CommitAsync());
@@ -660,4 +660,4 @@ public async Task NamedSQLQueryAsync()
660660
s.Close();
661661
}
662662
}
663-
}
663+
}

src/NHibernate.Test/Async/NHSpecificTest/NH3564/FixtureByCode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ protected override HbmMapping GetMappings()
103103
rc.Property(x => x.Name);
104104
rc.Property(x => x.DateOfBirth, pm =>
105105
{
106-
pm.Type(NHibernateUtil.Timestamp);
106+
pm.Type(NHibernateUtil.DateTime);
107107
});
108108
});
109109

src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public async Task NonNullableMappedAsDateTimeShouldBeCultureAgnosticAsync()
114114

115115
// Non-reg test case
116116
[Test]
117+
[Obsolete]
117118
public async Task NonNullableMappedAsTimestampShouldBeCultureAgnosticAsync()
118119
{
119120
using (ISession session = OpenSession())
@@ -227,6 +228,7 @@ public async Task NullableMappedAsDateTimeShouldBeCultureAgnosticAsync()
227228

228229
// Failing test case till NH-3961 is fixed
229230
[Test]
231+
[Obsolete]
230232
public async Task NullableMappedAsTimestampShouldBeCultureAgnosticAsync()
231233
{
232234
using (ISession session = OpenSession())
@@ -290,4 +292,4 @@ public async Task NullableShouldBeCultureAgnosticAsync()
290292
}
291293
}
292294
}
293-
}
295+
}

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

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,15 @@ public async Task SeedAsync()
104104
[TestCase(DateTimeKind.Unspecified)]
105105
[TestCase(DateTimeKind.Local)]
106106
[TestCase(DateTimeKind.Utc)]
107-
public virtual async Task ReadWriteAsync(DateTimeKind kind)
107+
public async Task ReadWriteAsync(DateTimeKind kind)
108108
{
109109
var entity = new DateTimeClass
110110
{
111111
Id = AdditionalDateId,
112112
Value = GetTestDate(kind)
113113
};
114114

115+
var typeKind = GetTypeKind();
115116
// Now must be acquired before transaction because some db freezes current_timestamp at transaction start,
116117
// like PostgreSQL. https://www.postgresql.org/docs/7.2/static/functions-datetime.html#AEN6700
117118
// This then wrecks tests with DbTimestampType if the always out of tran Now is called for fetching
@@ -123,11 +124,15 @@ public virtual async Task ReadWriteAsync(DateTimeKind kind)
123124
using (var t = s.BeginTransaction())
124125
{
125126
await (s.SaveAsync(entity));
127+
if (kind != typeKind && typeKind != DateTimeKind.Unspecified)
128+
{
129+
Assert.That(() => t.CommitAsync(), Throws.TypeOf<PropertyValueException>());
130+
return;
131+
}
126132
await (t.CommitAsync());
127133
}
128134
var afterNow = Now.AddTicks(DateAccuracyInTicks);
129135

130-
var typeKind = GetTypeKind();
131136
if (RevisionCheck)
132137
{
133138
Assert.That(entity.Revision, Is.GreaterThan(beforeNow).And.LessThan(afterNow), "Revision not correctly seeded.");
@@ -145,7 +150,7 @@ public virtual async Task ReadWriteAsync(DateTimeKind kind)
145150
retrieved = await (s.GetAsync<DateTimeClass>(AdditionalDateId));
146151

147152
Assert.That(retrieved, Is.Not.Null, "Entity not saved or cannot be retrieved by its key.");
148-
Assert.That(retrieved.Value, Is.EqualTo(entity.Value), "Value should be the same.");
153+
Assert.That(retrieved.Value, Is.EqualTo(GetExpectedValue(entity.Value)), "Unexpected value.");
149154
if (RevisionCheck)
150155
Assert.That(retrieved.Revision, Is.EqualTo(entity.Revision), "Revision should be the same.");
151156
Assert.That(retrieved.NullableValue, Is.EqualTo(entity.NullableValue), "NullableValue should be the same.");
@@ -184,13 +189,16 @@ public virtual async Task ReadWriteAsync(DateTimeKind kind)
184189
var retrievedAgain = await (s.GetAsync<DateTimeClass>(AdditionalDateId));
185190

186191
Assert.That(retrievedAgain, Is.Not.Null, "Entity deleted or cannot be retrieved again by its key.");
187-
Assert.That(retrievedAgain.Value, Is.EqualTo(retrieved.Value), "Value should be the same again.");
192+
Assert.That(
193+
retrievedAgain.Value,
194+
Is.EqualTo(GetExpectedValue(retrieved.Value)),
195+
"Unexpected value at second compare.");
188196
if (RevisionCheck)
189197
Assert.That(retrievedAgain.Revision, Is.EqualTo(retrieved.Revision), "Revision should be the same again.");
190198
Assert.That(
191199
retrievedAgain.NullableValue,
192-
Is.EqualTo(retrieved.NullableValue),
193-
"NullableValue should be the same again.");
200+
Is.EqualTo(GetExpectedValue(retrieved.NullableValue.Value)),
201+
"Unexpected NullableValue at second compare.");
194202
if (typeKind != DateTimeKind.Unspecified)
195203
{
196204
Assert.That(retrievedAgain.Value.Kind, Is.EqualTo(typeKind), "Value kind not correctly retrieved again.");
@@ -350,6 +358,17 @@ protected virtual DateTime GetTestDate(DateTimeKind kind)
350358
.AddDays(1);
351359
}
352360

361+
private DateTime GetExpectedValue(DateTime value)
362+
{
363+
var expectedValue = value;
364+
var typeKind = GetTypeKind();
365+
if (typeKind != DateTimeKind.Unspecified && typeKind != value.Kind && value.Kind != DateTimeKind.Unspecified)
366+
{
367+
expectedValue = typeKind == DateTimeKind.Local ? expectedValue.ToLocalTime() : expectedValue.ToUniversalTime();
368+
}
369+
return expectedValue;
370+
}
371+
353372
/// <summary>
354373
/// Return a date time still considered equal but as different as possible.
355374
/// </summary>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using System;
1112
using NHibernate.Type;
1213
using NUnit.Framework;
1314

1415
namespace NHibernate.Test.TypesTest
1516
{
1617
using System.Threading.Tasks;
1718
[TestFixture]
19+
[Obsolete]
1820
public class TimestampTypeFixtureAsync : AbstractDateTimeTypeFixtureAsync
1921
{
2022
protected override string TypeName => "Timestamp";

src/NHibernate.Test/Async/VersionTest/Db/DbVersionFixture.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public async System.Threading.Tasks.Task CollectionVersionAsync()
7676
await (t.CommitAsync());
7777
s.Close();
7878

79-
Assert.That(!NHibernateUtil.Timestamp.IsEqual(guyTimestamp, guy.Timestamp), "owner version not incremented");
79+
Assert.That(!NHibernateUtil.DbTimestamp.IsEqual(guyTimestamp, guy.Timestamp), "owner version not incremented");
8080

8181
guyTimestamp = guy.Timestamp;
8282
Thread.Sleep(1500);
@@ -88,7 +88,7 @@ public async System.Threading.Tasks.Task CollectionVersionAsync()
8888
await (t.CommitAsync());
8989
s.Close();
9090

91-
Assert.That(!NHibernateUtil.Timestamp.IsEqual(guyTimestamp, guy.Timestamp), "owner version not incremented");
91+
Assert.That(!NHibernateUtil.DbTimestamp.IsEqual(guyTimestamp, guy.Timestamp), "owner version not incremented");
9292

9393
s = OpenSession();
9494
t = s.BeginTransaction();
@@ -121,7 +121,7 @@ public async System.Threading.Tasks.Task CollectionNoVersionAsync()
121121
s.Close();
122122

123123
const string ownerVersionWasIncremented = "owner version was incremented ({0:o} => {1:o})";
124-
Assert.That(NHibernateUtil.Timestamp.IsEqual(guyTimestamp, guy.Timestamp),
124+
Assert.That(NHibernateUtil.DbTimestamp.IsEqual(guyTimestamp, guy.Timestamp),
125125
string.Format(ownerVersionWasIncremented, guyTimestamp, guy.Timestamp));
126126
Console.WriteLine(string.Format(ownerVersionWasIncremented, guyTimestamp, guy.Timestamp));
127127

@@ -132,7 +132,7 @@ public async System.Threading.Tasks.Task CollectionNoVersionAsync()
132132
await (t.CommitAsync());
133133
s.Close();
134134

135-
Assert.That(NHibernateUtil.Timestamp.IsEqual(guyTimestamp, guy.Timestamp),
135+
Assert.That(NHibernateUtil.DbTimestamp.IsEqual(guyTimestamp, guy.Timestamp),
136136
string.Format(ownerVersionWasIncremented, guyTimestamp, guy.Timestamp));
137137

138138
s = OpenSession();

src/NHibernate.Test/DialectTest/MsSql2008DialectFixture.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public void CheckPreSql2008DateTimeTypes()
1919
cfg.SetProperty(Environment.Dialect, typeof(MsSql2005Dialect).FullName);
2020
var mapping = GetMapping(cfg);
2121
AssertSqlType(NHibernateUtil.DateTime, SqlTypeFactory.DateTime, mapping);
22+
#pragma warning disable 618 // Timestamp is obsolete
2223
AssertSqlType(NHibernateUtil.Timestamp, SqlTypeFactory.DateTime, mapping);
24+
#pragma warning restore 618
2325
AssertSqlType(NHibernateUtil.DbTimestamp, SqlTypeFactory.DateTime, mapping);
2426
AssertSqlType(NHibernateUtil.LocalDateTime, SqlTypeFactory.DateTime, mapping);
2527
AssertSqlType(NHibernateUtil.UtcDateTime, SqlTypeFactory.DateTime, mapping);
@@ -35,7 +37,9 @@ public void CheckSql2008DateTimeTypes()
3537
cfg.SetProperty(Environment.Dialect, typeof(MsSql2008Dialect).FullName);
3638
var mapping = GetMapping(cfg);
3739
AssertSqlType(NHibernateUtil.DateTime, SqlTypeFactory.DateTime2, mapping);
40+
#pragma warning disable 618 // Timestamp is obsolete
3841
AssertSqlType(NHibernateUtil.Timestamp, SqlTypeFactory.DateTime2, mapping);
42+
#pragma warning restore 618
3943
AssertSqlType(NHibernateUtil.DbTimestamp, SqlTypeFactory.DateTime2, mapping);
4044
AssertSqlType(NHibernateUtil.LocalDateTime, SqlTypeFactory.DateTime2, mapping);
4145
AssertSqlType(NHibernateUtil.UtcDateTime, SqlTypeFactory.DateTime2, mapping);
@@ -52,7 +56,9 @@ public void CheckKeepDateTime()
5256
cfg.SetProperty(Environment.SqlTypesKeepDateTime, "true");
5357
var mapping = GetMapping(cfg);
5458
AssertSqlType(NHibernateUtil.DateTime, SqlTypeFactory.DateTime, mapping);
59+
#pragma warning disable 618 // Timestamp is obsolete
5560
AssertSqlType(NHibernateUtil.Timestamp, SqlTypeFactory.DateTime, mapping);
61+
#pragma warning restore 618
5662
AssertSqlType(NHibernateUtil.DbTimestamp, SqlTypeFactory.DateTime, mapping);
5763
AssertSqlType(NHibernateUtil.LocalDateTime, SqlTypeFactory.DateTime, mapping);
5864
AssertSqlType(NHibernateUtil.UtcDateTime, SqlTypeFactory.DateTime, mapping);

src/NHibernate.Test/DialectTest/MsSqlDialectFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ public void GetLimitString()
6363
}
6464

6565
[Test]
66-
public void TimestampRounding()
66+
public void DateTimeRounding()
6767
{
6868
DateTime input = new DateTime(2000, 1, 1, 10, 11, 12, 13);
6969
DateTime expected = new DateTime(2000, 1, 1, 10, 11, 12, 10);
7070

71-
Assert.AreEqual(expected, TimestampType.Round(input, d.TimestampResolutionInTicks));
71+
Assert.AreEqual(expected, AbstractDateTimeType.Round(input, d.TimestampResolutionInTicks));
7272
}
7373
}
7474
}

src/NHibernate.Test/Legacy/SQLLoaderTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void TS()
4848
session.Save(sim, 1L);
4949
IQuery q = session.CreateSQLQuery("select {sim.*} from Simple {sim} where {sim}.date_ = ?")
5050
.AddEntity("sim", typeof(Simple));
51-
q.SetTimestamp(0, sim.Date);
51+
q.SetDateTime(0, sim.Date);
5252
Assert.AreEqual(1, q.List().Count, "q.List.Count");
5353
session.Delete(sim);
5454
txn.Commit();
@@ -72,7 +72,7 @@ public void TSNamed()
7272
IQuery q =
7373
session.CreateSQLQuery("select {sim.*} from Simple {sim} where {sim}.date_ = :fred")
7474
.AddEntity("sim", typeof(Simple));
75-
q.SetTimestamp("fred", sim.Date);
75+
q.SetDateTime("fred", sim.Date);
7676
Assert.AreEqual(1, q.List().Count, "q.List.Count");
7777
session.Delete(sim);
7878
txn.Commit();
@@ -648,4 +648,4 @@ public void NamedSQLQuery()
648648
s.Close();
649649
}
650650
}
651-
}
651+
}

src/NHibernate.Test/NHSpecificTest/NH3564/FixtureByCode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ protected override HbmMapping GetMappings()
118118
rc.Property(x => x.Name);
119119
rc.Property(x => x.DateOfBirth, pm =>
120120
{
121-
pm.Type(NHibernateUtil.Timestamp);
121+
pm.Type(NHibernateUtil.DateTime);
122122
});
123123
});
124124

src/NHibernate.Test/NHSpecificTest/NH3961/DateParametersComparedTo.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ public void NonNullableMappedAsDateTimeShouldBeCultureAgnostic()
103103

104104
// Non-reg test case
105105
[Test]
106+
[Obsolete]
106107
public void NonNullableMappedAsTimestampShouldBeCultureAgnostic()
107108
{
108109
using (ISession session = OpenSession())
@@ -216,6 +217,7 @@ public void NullableMappedAsDateTimeShouldBeCultureAgnostic()
216217

217218
// Failing test case till NH-3961 is fixed
218219
[Test]
220+
[Obsolete]
219221
public void NullableMappedAsTimestampShouldBeCultureAgnostic()
220222
{
221223
using (ISession session = OpenSession())
@@ -279,4 +281,4 @@ public void NullableShouldBeCultureAgnostic()
279281
}
280282
}
281283
}
282-
}
284+
}

src/NHibernate.Test/QueryTest/DetachedQueryFixture.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void PropertiesSet()
9797
tdq.SetSingle(14, 1.1f);
9898
tdq.SetString(15, "");
9999
tdq.SetTime(16, DateTime.Now);
100-
tdq.SetTimestamp(17, DateTime.Now);
100+
tdq.SetDateTimeNoMs(17, DateTime.Now);
101101
tdq.SetGuid(18, Guid.Empty);
102102
Assert.IsTrue(tdq.PosParams[1].Type.Equals(NHibernateUtil.AnsiString));
103103
Assert.IsTrue(tdq.PosParams[2].Type.Equals(NHibernateUtil.Binary));
@@ -115,7 +115,7 @@ public void PropertiesSet()
115115
Assert.IsTrue(tdq.PosParams[14].Type.Equals(NHibernateUtil.Single));
116116
Assert.IsTrue(tdq.PosParams[15].Type.Equals(NHibernateUtil.String));
117117
Assert.IsTrue(tdq.PosParams[16].Type.Equals(NHibernateUtil.Time));
118-
Assert.IsTrue(tdq.PosParams[17].Type.Equals(NHibernateUtil.Timestamp));
118+
Assert.IsTrue(tdq.PosParams[17].Type.Equals(NHibernateUtil.DateTimeNoMs));
119119
Assert.IsTrue(tdq.PosParams[18].Type.Equals(NHibernateUtil.Guid));
120120

121121
tdq.SetAnsiString("1", "");
@@ -134,7 +134,7 @@ public void PropertiesSet()
134134
tdq.SetSingle("14", 1.1f);
135135
tdq.SetString("15", "");
136136
tdq.SetTime("16", DateTime.Now);
137-
tdq.SetTimestamp("17", DateTime.Now);
137+
tdq.SetDateTimeNoMs("17", DateTime.Now);
138138
tdq.SetGuid("18", Guid.Empty);
139139
Assert.IsTrue(tdq.NamedParams["1"].Type.Equals(NHibernateUtil.AnsiString));
140140
Assert.IsTrue(tdq.NamedParams["2"].Type.Equals(NHibernateUtil.Binary));
@@ -152,7 +152,7 @@ public void PropertiesSet()
152152
Assert.IsTrue(tdq.NamedParams["14"].Type.Equals(NHibernateUtil.Single));
153153
Assert.IsTrue(tdq.NamedParams["15"].Type.Equals(NHibernateUtil.String));
154154
Assert.IsTrue(tdq.NamedParams["16"].Type.Equals(NHibernateUtil.Time));
155-
Assert.IsTrue(tdq.NamedParams["17"].Type.Equals(NHibernateUtil.Timestamp));
155+
Assert.IsTrue(tdq.NamedParams["17"].Type.Equals(NHibernateUtil.DateTimeNoMs));
156156
Assert.IsTrue(tdq.NamedParams["18"].Type.Equals(NHibernateUtil.Guid));
157157

158158
tdq.SetParameter(10, 123456m);

0 commit comments

Comments
 (0)