From e785755a995c8f252f4335ea406909ed581850ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericdelaporte@users.noreply.github.com>
Date: Fri, 2 Feb 2024 16:51:18 +0100
Subject: [PATCH 1/5] Support an arbitrary length for CultureInfoType
fix #3473
---
src/NHibernate.DomainModel/Location.cs | 2 ++
src/NHibernate.DomainModel/Location.hbm.xml | 3 ++-
src/NHibernate.Test/Legacy/FooBarTest.cs | 2 ++
src/NHibernate/Type/CultureInfoType.cs | 8 ++++++--
src/NHibernate/Type/TypeFactory.cs | 9 +++++----
5 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/NHibernate.DomainModel/Location.cs b/src/NHibernate.DomainModel/Location.cs
index 4559856996e..da6db4f0d41 100644
--- a/src/NHibernate.DomainModel/Location.cs
+++ b/src/NHibernate.DomainModel/Location.cs
@@ -52,6 +52,8 @@ public CultureInfo Locale
set { _locale = value; }
}
+ public CultureInfo ExtendedLocale { get; set; }
+
#region System.Object Members
public override bool Equals(object obj)
diff --git a/src/NHibernate.DomainModel/Location.hbm.xml b/src/NHibernate.DomainModel/Location.hbm.xml
index 56aed1ea773..65a031047d6 100644
--- a/src/NHibernate.DomainModel/Location.hbm.xml
+++ b/src/NHibernate.DomainModel/Location.hbm.xml
@@ -19,6 +19,7 @@
/>
+
-
\ No newline at end of file
+
diff --git a/src/NHibernate.Test/Legacy/FooBarTest.cs b/src/NHibernate.Test/Legacy/FooBarTest.cs
index 9704b5dc737..3685a3629ae 100644
--- a/src/NHibernate.Test/Legacy/FooBarTest.cs
+++ b/src/NHibernate.Test/Legacy/FooBarTest.cs
@@ -5150,6 +5150,7 @@ public void EmbeddedCompositeID()
l.CountryCode = "AU";
l.Description = "foo bar";
l.Locale = CultureInfo.CreateSpecificCulture("en-AU");
+ l.ExtendedLocale = CultureInfo.CreateSpecificCulture("en-US-POSIX");
l.StreetName = "Brunswick Rd";
l.StreetNumber = 300;
l.City = "Melbourne";
@@ -5165,6 +5166,7 @@ public void EmbeddedCompositeID()
Assert.AreEqual("AU", l.CountryCode);
Assert.AreEqual("Melbourne", l.City);
Assert.AreEqual(CultureInfo.CreateSpecificCulture("en-AU"), l.Locale);
+ Assert.That(l.ExtendedLocale, Is.EqualTo(CultureInfo.CreateSpecificCulture("en-US-POSIX")));
s.Close();
s = OpenSession();
diff --git a/src/NHibernate/Type/CultureInfoType.cs b/src/NHibernate/Type/CultureInfoType.cs
index 47daf666588..417e4b2ef89 100644
--- a/src/NHibernate/Type/CultureInfoType.cs
+++ b/src/NHibernate/Type/CultureInfoType.cs
@@ -8,12 +8,12 @@
namespace NHibernate.Type
{
///
- /// Maps a Property
+ /// Maps a Property
/// to a column.
///
///
/// CultureInfoType stores the culture name (not the Culture ID) of the
- /// in the DB.
+ /// in the DB.
///
[Serializable]
public partial class CultureInfoType : ImmutableType, ILiteralType
@@ -22,6 +22,10 @@ internal CultureInfoType() : base(new StringSqlType(5))
{
}
+ internal CultureInfoType(StringSqlType sqlType) : base(sqlType)
+ {
+ }
+
///
public override object Get(DbDataReader rs, int index, ISessionImplementor session)
{
diff --git a/src/NHibernate/Type/TypeFactory.cs b/src/NHibernate/Type/TypeFactory.cs
index 758353c48a4..0fd384d25c9 100644
--- a/src/NHibernate/Type/TypeFactory.cs
+++ b/src/NHibernate/Type/TypeFactory.cs
@@ -292,7 +292,9 @@ private static void RegisterDefaultNetTypes()
RegisterType(typeof (Boolean), NHibernateUtil.Boolean, new[] { "boolean", "bool" });
RegisterType(typeof (Byte), NHibernateUtil.Byte, new[]{ "byte"});
RegisterType(typeof (Char), NHibernateUtil.Character, new[] {"character", "char"});
- RegisterType(typeof (CultureInfo), NHibernateUtil.CultureInfo, new[]{ "locale"});
+ RegisterType(typeof (CultureInfo), NHibernateUtil.CultureInfo, new[] { "locale" },
+ l => GetType(NHibernateUtil.CultureInfo, l, len => new CultureInfoType(SqlTypeFactory.GetString(len))),
+ false);
RegisterType(typeof (DateTime), NHibernateUtil.DateTime, new[] { "datetime" },
s => GetType(NHibernateUtil.DateTime, s, scale => new DateTimeType(SqlTypeFactory.GetDateTime((byte)scale))),
false);
@@ -344,11 +346,10 @@ private static void RegisterDefaultNetTypes()
}
///
- /// Register other NO Default .NET type
+ /// Register types which are not a default for a .NET type.
///
///
- /// These type will be used only when the "type" attribute was is specified in the mapping.
- /// These are in here because needed to NO override default CLR types and be available in mappings
+ /// These types will be used only when the "type" attribute is specified in the mapping.
///
private static void RegisterBuiltInTypes()
{
From eba0e651eeb67fa38d399adb5c631e8cb4b27ff4 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Fri, 2 Feb 2024 16:22:41 +0000
Subject: [PATCH 2/5] Generate async files
---
src/NHibernate.Test/Async/Legacy/FooBarTest.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/NHibernate.Test/Async/Legacy/FooBarTest.cs b/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
index f7f7f1a2b8f..79b938d0981 100644
--- a/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
+++ b/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
@@ -5162,6 +5162,7 @@ public async Task EmbeddedCompositeIDAsync()
l.CountryCode = "AU";
l.Description = "foo bar";
l.Locale = CultureInfo.CreateSpecificCulture("en-AU");
+ l.ExtendedLocale = CultureInfo.CreateSpecificCulture("en-US-POSIX");
l.StreetName = "Brunswick Rd";
l.StreetNumber = 300;
l.City = "Melbourne";
@@ -5177,6 +5178,7 @@ public async Task EmbeddedCompositeIDAsync()
Assert.AreEqual("AU", l.CountryCode);
Assert.AreEqual("Melbourne", l.City);
Assert.AreEqual(CultureInfo.CreateSpecificCulture("en-AU"), l.Locale);
+ Assert.That(l.ExtendedLocale, Is.EqualTo(CultureInfo.CreateSpecificCulture("en-US-POSIX")));
s.Close();
s = OpenSession();
From b0046cc183275077827d8cb15c31f1456db21833 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericdelaporte@users.noreply.github.com>
Date: Sun, 4 Feb 2024 19:04:22 +0100
Subject: [PATCH 3/5] Add a dedicated test for CultureInfoType
And refactor the teardown of these tests.
---
src/NHibernate.DomainModel/Location.cs | 2 -
src/NHibernate.DomainModel/Location.hbm.xml | 3 +-
.../Async/Legacy/FooBarTest.cs | 2 -
.../TypesTest/AbstractDateTimeTypeFixture.cs | 12 +-
.../Async/TypesTest/CultureInfoTypeFixture.cs | 107 ++++++++++++++++++
.../TypesTest/DateTimeOffsetTypeFixture.cs | 20 ++--
.../Async/TypesTest/DecimalTypeFixture.cs | 12 --
.../Async/TypesTest/EnumStringTypeFixture.cs | 8 --
.../TypesTest/GenericEnumStringTypeFixture.cs | 8 --
.../Async/TypesTest/StringTypeFixture.cs | 8 --
.../TypesTest/TimeAsTimeSpanTypeFixture.cs | 12 --
src/NHibernate.Test/Legacy/FooBarTest.cs | 2 -
.../TypesTest/AbstractDateTimeTypeFixture.cs | 12 +-
.../TypesTest/CultureInfoClass.cs | 12 ++
.../TypesTest/CultureInfoClass.hbm.xml | 9 ++
.../TypesTest/CultureInfoTypeFixture.cs | 104 +++++++++++++++++
.../TypesTest/DateTimeOffsetTypeFixture.cs | 20 ++--
.../TypesTest/DecimalTypeFixture.cs | 12 --
.../TypesTest/EnumStringTypeFixture.cs | 8 --
.../TypesTest/GenericEnumStringTypeFixture.cs | 8 --
.../TypesTest/StringTypeFixture.cs | 8 --
.../TypesTest/TimeAsTimeSpanTypeFixture.cs | 12 --
.../TypesTest/TypeFixtureBase.cs | 25 ++--
23 files changed, 266 insertions(+), 160 deletions(-)
create mode 100644 src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
create mode 100644 src/NHibernate.Test/TypesTest/CultureInfoClass.cs
create mode 100644 src/NHibernate.Test/TypesTest/CultureInfoClass.hbm.xml
create mode 100644 src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
diff --git a/src/NHibernate.DomainModel/Location.cs b/src/NHibernate.DomainModel/Location.cs
index da6db4f0d41..4559856996e 100644
--- a/src/NHibernate.DomainModel/Location.cs
+++ b/src/NHibernate.DomainModel/Location.cs
@@ -52,8 +52,6 @@ public CultureInfo Locale
set { _locale = value; }
}
- public CultureInfo ExtendedLocale { get; set; }
-
#region System.Object Members
public override bool Equals(object obj)
diff --git a/src/NHibernate.DomainModel/Location.hbm.xml b/src/NHibernate.DomainModel/Location.hbm.xml
index 65a031047d6..56aed1ea773 100644
--- a/src/NHibernate.DomainModel/Location.hbm.xml
+++ b/src/NHibernate.DomainModel/Location.hbm.xml
@@ -19,7 +19,6 @@
/>
-
-
+
\ No newline at end of file
diff --git a/src/NHibernate.Test/Async/Legacy/FooBarTest.cs b/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
index 79b938d0981..f7f7f1a2b8f 100644
--- a/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
+++ b/src/NHibernate.Test/Async/Legacy/FooBarTest.cs
@@ -5162,7 +5162,6 @@ public async Task EmbeddedCompositeIDAsync()
l.CountryCode = "AU";
l.Description = "foo bar";
l.Locale = CultureInfo.CreateSpecificCulture("en-AU");
- l.ExtendedLocale = CultureInfo.CreateSpecificCulture("en-US-POSIX");
l.StreetName = "Brunswick Rd";
l.StreetNumber = 300;
l.City = "Melbourne";
@@ -5178,7 +5177,6 @@ public async Task EmbeddedCompositeIDAsync()
Assert.AreEqual("AU", l.CountryCode);
Assert.AreEqual("Melbourne", l.City);
Assert.AreEqual(CultureInfo.CreateSpecificCulture("en-AU"), l.Locale);
- Assert.That(l.ExtendedLocale, Is.EqualTo(CultureInfo.CreateSpecificCulture("en-US-POSIX")));
s.Close();
s = OpenSession();
diff --git a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs
index 4588e8d1017..4307080f4cf 100644
--- a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs
@@ -69,14 +69,10 @@ protected override void OnSetUp()
protected override void OnTearDown()
{
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DateTimeClass").ExecuteUpdate();
- t.Commit();
- }
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ s.CreateQuery("delete from DateTimeClass").ExecuteUpdate();
+ t.Commit();
}
protected override void DropSchema()
diff --git a/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
new file mode 100644
index 00000000000..a86fac7d458
--- /dev/null
+++ b/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
@@ -0,0 +1,107 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System;
+using System.Globalization;
+using NHibernate.Dialect;
+using NHibernate.Type;
+using NUnit.Framework;
+
+namespace NHibernate.Test.TypesTest
+{
+ using System.Threading.Tasks;
+ [TestFixture]
+ public class CultureInfoTypeFixtureAsync : TypeFixtureBase
+ {
+ protected override string TypeName
+ {
+ get { return "CultureInfo"; }
+ }
+
+ [Test]
+ public async Task ReadWriteBasicCultureAsync()
+ {
+ Guid id;
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = new CultureInfoClass { BasicCulture = CultureInfo.GetCultureInfo("en-US") };
+ await (s.SaveAsync(entity));
+ id = entity.Id;
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = await (s.GetAsync(id));
+ Assert.That(entity.BasicCulture, Is.Not.Null);
+ Assert.That(entity.BasicCulture.Name, Is.EqualTo("en-US"));
+ Assert.That(entity.BasicCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US")));
+ entity.BasicCulture = CultureInfo.GetCultureInfo("fr-BE");
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = await (s.GetAsync(id));
+ Assert.That(entity.BasicCulture.Name, Is.EqualTo("fr-BE"));
+ Assert.That(entity.BasicCulture, Is.EqualTo(CultureInfo.GetCultureInfo("fr-BE")));
+ entity.BasicCulture = null;
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = await (s.GetAsync(id));
+ Assert.That(entity.BasicCulture, Is.Null);
+ await (t.CommitAsync());
+ }
+ }
+
+ [Test]
+ public async Task ReadWriteExtendedCultureAsync()
+ {
+ Guid id;
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = new CultureInfoClass { ExtendedCulture = CultureInfo.GetCultureInfo("en-US-posix") };
+ await (s.SaveAsync(entity));
+ id = entity.Id;
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = await (s.GetAsync(id));
+ Assert.That(entity.ExtendedCulture, Is.Not.Null);
+ Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix"));
+ Assert.That(entity.ExtendedCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US-posix")));
+ await (t.CommitAsync());
+ }
+ }
+
+ [Test]
+ public async Task WriteTooLongCultureAsync()
+ {
+ if (Dialect is SQLiteDialect)
+ Assert.Ignore("SQLite has no length limited string type.");
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ var entity = new CultureInfoClass { BasicCulture = CultureInfo.GetCultureInfo("en-US-posix") };
+ await (s.SaveAsync(entity));
+ Assert.That(t.Commit, Throws.Exception);
+ }
+ }
+}
diff --git a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs
index 64e62c0e326..1c604513d85 100644
--- a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs
@@ -69,18 +69,6 @@ protected override void OnSetUp()
}
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DateTimeOffsetClass").ExecuteUpdate();
- t.Commit();
- }
- }
-
protected override void DropSchema()
{
(Sfi.ConnectionProvider.Driver as ClientDriverWithParamsStats)?.CleanUp();
@@ -354,6 +342,14 @@ public class DateTimeOffsetTypeWithScaleFixtureAsync : DateTimeOffsetTypeFixture
// The timestamp rounding in seeding does not account scale.
protected override bool RevisionCheck => false;
+ protected override void OnTearDown()
+ {
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ s.CreateQuery("delete DateTimeOffsetClass").ExecuteUpdate();
+ t.Commit();
+ }
+
[Test]
public async Task LowerDigitsAreIgnoredAsync()
{
diff --git a/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
index c4ab2a0c6f0..1917cbd0b4b 100644
--- a/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
@@ -54,18 +54,6 @@ protected override void OnSetUp()
}
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DecimalClass").ExecuteUpdate();
- t.Commit();
- }
- }
-
[Test]
public async Task ReadWriteAsync()
{
diff --git a/src/NHibernate.Test/Async/TypesTest/EnumStringTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/EnumStringTypeFixture.cs
index 255951b0b7a..1733fd0bce8 100644
--- a/src/NHibernate.Test/Async/TypesTest/EnumStringTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/EnumStringTypeFixture.cs
@@ -40,14 +40,6 @@ protected override void OnSetUp()
s.Close();
}
- protected override void OnTearDown()
- {
- ISession s = OpenSession();
- s.Delete("from EnumStringClass");
- s.Flush();
- s.Close();
- }
-
[Test]
public async Task ReadFromLoadAsync()
{
diff --git a/src/NHibernate.Test/Async/TypesTest/GenericEnumStringTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/GenericEnumStringTypeFixture.cs
index 699ef01850b..06aa32c1ab7 100644
--- a/src/NHibernate.Test/Async/TypesTest/GenericEnumStringTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/GenericEnumStringTypeFixture.cs
@@ -42,14 +42,6 @@ protected override void OnSetUp()
s.Close();
}
- protected override void OnTearDown()
- {
- ISession s = OpenSession();
- s.Delete("from GenericEnumStringClass");
- s.Flush();
- s.Close();
- }
-
[Test]
public async Task ReadFromLoadAsync()
{
diff --git a/src/NHibernate.Test/Async/TypesTest/StringTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/StringTypeFixture.cs
index a7d74e58e4d..0808ca7e837 100644
--- a/src/NHibernate.Test/Async/TypesTest/StringTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/StringTypeFixture.cs
@@ -26,14 +26,6 @@ protected override string TypeName
get { return "String"; }
}
- protected override void OnTearDown()
- {
- using (var s = OpenSession())
- {
- s.CreateQuery("delete from StringClass").ExecuteUpdate();
- }
- }
-
[Test]
public async Task InsertNullValueAsync()
{
diff --git a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs
index 134fdee1b32..f9c585d7956 100644
--- a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs
@@ -50,18 +50,6 @@ protected override string TypeName
get { return "TimeAsTimeSpan"; }
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var tx = s.BeginTransaction())
- {
- s.CreateQuery("delete from TimeAsTimeSpanClass").ExecuteUpdate();
- tx.Commit();
- }
- }
-
[Test]
public async Task SavingAndRetrievingAsync()
{
diff --git a/src/NHibernate.Test/Legacy/FooBarTest.cs b/src/NHibernate.Test/Legacy/FooBarTest.cs
index 3685a3629ae..9704b5dc737 100644
--- a/src/NHibernate.Test/Legacy/FooBarTest.cs
+++ b/src/NHibernate.Test/Legacy/FooBarTest.cs
@@ -5150,7 +5150,6 @@ public void EmbeddedCompositeID()
l.CountryCode = "AU";
l.Description = "foo bar";
l.Locale = CultureInfo.CreateSpecificCulture("en-AU");
- l.ExtendedLocale = CultureInfo.CreateSpecificCulture("en-US-POSIX");
l.StreetName = "Brunswick Rd";
l.StreetNumber = 300;
l.City = "Melbourne";
@@ -5166,7 +5165,6 @@ public void EmbeddedCompositeID()
Assert.AreEqual("AU", l.CountryCode);
Assert.AreEqual("Melbourne", l.City);
Assert.AreEqual(CultureInfo.CreateSpecificCulture("en-AU"), l.Locale);
- Assert.That(l.ExtendedLocale, Is.EqualTo(CultureInfo.CreateSpecificCulture("en-US-POSIX")));
s.Close();
s = OpenSession();
diff --git a/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs b/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs
index 67b36a0d2cc..0d95535b947 100644
--- a/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs
@@ -57,14 +57,10 @@ protected override void OnSetUp()
protected override void OnTearDown()
{
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DateTimeClass").ExecuteUpdate();
- t.Commit();
- }
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ s.CreateQuery("delete from DateTimeClass").ExecuteUpdate();
+ t.Commit();
}
protected override void DropSchema()
diff --git a/src/NHibernate.Test/TypesTest/CultureInfoClass.cs b/src/NHibernate.Test/TypesTest/CultureInfoClass.cs
new file mode 100644
index 00000000000..601cf00fbda
--- /dev/null
+++ b/src/NHibernate.Test/TypesTest/CultureInfoClass.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Globalization;
+
+namespace NHibernate.Test.TypesTest
+{
+ public class CultureInfoClass
+ {
+ public Guid Id { get; set; }
+ public CultureInfo BasicCulture { get; set; }
+ public CultureInfo ExtendedCulture { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/TypesTest/CultureInfoClass.hbm.xml b/src/NHibernate.Test/TypesTest/CultureInfoClass.hbm.xml
new file mode 100644
index 00000000000..8472d89d7f0
--- /dev/null
+++ b/src/NHibernate.Test/TypesTest/CultureInfoClass.hbm.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs b/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
new file mode 100644
index 00000000000..7c7977941fe
--- /dev/null
+++ b/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
@@ -0,0 +1,104 @@
+using System;
+using System.Globalization;
+using NHibernate.Dialect;
+using NHibernate.Type;
+using NUnit.Framework;
+
+namespace NHibernate.Test.TypesTest
+{
+ [TestFixture]
+ public class CultureInfoTypeFixture : TypeFixtureBase
+ {
+ protected override string TypeName
+ {
+ get { return "CultureInfo"; }
+ }
+
+ [Test]
+ public void ReadWriteBasicCulture()
+ {
+ Guid id;
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = new CultureInfoClass { BasicCulture = CultureInfo.GetCultureInfo("en-US") };
+ s.Save(entity);
+ id = entity.Id;
+ t.Commit();
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = s.Get(id);
+ Assert.That(entity.BasicCulture, Is.Not.Null);
+ Assert.That(entity.BasicCulture.Name, Is.EqualTo("en-US"));
+ Assert.That(entity.BasicCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US")));
+ entity.BasicCulture = CultureInfo.GetCultureInfo("fr-BE");
+ t.Commit();
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = s.Get(id);
+ Assert.That(entity.BasicCulture.Name, Is.EqualTo("fr-BE"));
+ Assert.That(entity.BasicCulture, Is.EqualTo(CultureInfo.GetCultureInfo("fr-BE")));
+ entity.BasicCulture = null;
+ t.Commit();
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = s.Get(id);
+ Assert.That(entity.BasicCulture, Is.Null);
+ t.Commit();
+ }
+ }
+
+ [Test]
+ public void ReadWriteExtendedCulture()
+ {
+ Guid id;
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = new CultureInfoClass { ExtendedCulture = CultureInfo.GetCultureInfo("en-US-posix") };
+ s.Save(entity);
+ id = entity.Id;
+ t.Commit();
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var entity = s.Get(id);
+ Assert.That(entity.ExtendedCulture, Is.Not.Null);
+ Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix"));
+ Assert.That(entity.ExtendedCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US-posix")));
+ t.Commit();
+ }
+ }
+
+ [Test]
+ public void WriteTooLongCulture()
+ {
+ if (Dialect is SQLiteDialect)
+ Assert.Ignore("SQLite has no length limited string type.");
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ var entity = new CultureInfoClass { BasicCulture = CultureInfo.GetCultureInfo("en-US-posix") };
+ s.Save(entity);
+ Assert.That(t.Commit, Throws.Exception);
+ }
+
+ [Test]
+ public void AutoDiscoverFromNetType()
+ {
+ // integration test to be 100% sure
+ var propertyType = Sfi.GetEntityPersister(typeof(CultureInfoClass).FullName).GetPropertyType(nameof(CultureInfoClass.BasicCulture));
+ Assert.That(propertyType, Is.InstanceOf());
+ }
+ }
+}
diff --git a/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs
index 0881a08e878..b38475b3a40 100644
--- a/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs
@@ -57,18 +57,6 @@ protected override void OnSetUp()
}
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DateTimeOffsetClass").ExecuteUpdate();
- t.Commit();
- }
- }
-
protected override void DropSchema()
{
(Sfi.ConnectionProvider.Driver as ClientDriverWithParamsStats)?.CleanUp();
@@ -382,6 +370,14 @@ public class DateTimeOffsetTypeWithScaleFixture : DateTimeOffsetTypeFixture
// The timestamp rounding in seeding does not account scale.
protected override bool RevisionCheck => false;
+ protected override void OnTearDown()
+ {
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ s.CreateQuery("delete DateTimeOffsetClass").ExecuteUpdate();
+ t.Commit();
+ }
+
[Test]
public void LowerDigitsAreIgnored()
{
diff --git a/src/NHibernate.Test/TypesTest/DecimalTypeFixture.cs b/src/NHibernate.Test/TypesTest/DecimalTypeFixture.cs
index 72561fc7008..4f839a39df8 100644
--- a/src/NHibernate.Test/TypesTest/DecimalTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/DecimalTypeFixture.cs
@@ -45,18 +45,6 @@ protected override void OnSetUp()
}
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var t = s.BeginTransaction())
- {
- s.CreateQuery("delete from DecimalClass").ExecuteUpdate();
- t.Commit();
- }
- }
-
///
/// Test that two decimal fields that are exactly equal are returned
/// as Equal by the DecimalType.
diff --git a/src/NHibernate.Test/TypesTest/EnumStringTypeFixture.cs b/src/NHibernate.Test/TypesTest/EnumStringTypeFixture.cs
index ca3a07797df..9574983a65b 100644
--- a/src/NHibernate.Test/TypesTest/EnumStringTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/EnumStringTypeFixture.cs
@@ -29,14 +29,6 @@ protected override void OnSetUp()
s.Close();
}
- protected override void OnTearDown()
- {
- ISession s = OpenSession();
- s.Delete("from EnumStringClass");
- s.Flush();
- s.Close();
- }
-
[Test]
public void ReadFromLoad()
{
diff --git a/src/NHibernate.Test/TypesTest/GenericEnumStringTypeFixture.cs b/src/NHibernate.Test/TypesTest/GenericEnumStringTypeFixture.cs
index ea64fc18a2c..1ff4f62313a 100644
--- a/src/NHibernate.Test/TypesTest/GenericEnumStringTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/GenericEnumStringTypeFixture.cs
@@ -31,14 +31,6 @@ protected override void OnSetUp()
s.Close();
}
- protected override void OnTearDown()
- {
- ISession s = OpenSession();
- s.Delete("from GenericEnumStringClass");
- s.Flush();
- s.Close();
- }
-
[Test]
public void ReadFromLoad()
{
diff --git a/src/NHibernate.Test/TypesTest/StringTypeFixture.cs b/src/NHibernate.Test/TypesTest/StringTypeFixture.cs
index e544390e5ca..7a970476cfa 100644
--- a/src/NHibernate.Test/TypesTest/StringTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/StringTypeFixture.cs
@@ -14,14 +14,6 @@ protected override string TypeName
get { return "String"; }
}
- protected override void OnTearDown()
- {
- using (var s = OpenSession())
- {
- s.CreateQuery("delete from StringClass").ExecuteUpdate();
- }
- }
-
[Test]
public void InsertNullValue()
{
diff --git a/src/NHibernate.Test/TypesTest/TimeAsTimeSpanTypeFixture.cs b/src/NHibernate.Test/TypesTest/TimeAsTimeSpanTypeFixture.cs
index 5c0e2c364f0..4684693f498 100644
--- a/src/NHibernate.Test/TypesTest/TimeAsTimeSpanTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/TimeAsTimeSpanTypeFixture.cs
@@ -38,18 +38,6 @@ protected override string TypeName
get { return "TimeAsTimeSpan"; }
}
- protected override void OnTearDown()
- {
- base.OnTearDown();
-
- using (var s = OpenSession())
- using (var tx = s.BeginTransaction())
- {
- s.CreateQuery("delete from TimeAsTimeSpanClass").ExecuteUpdate();
- tx.Commit();
- }
- }
-
[Test]
public void PropertiesHasExpectedType()
{
diff --git a/src/NHibernate.Test/TypesTest/TypeFixtureBase.cs b/src/NHibernate.Test/TypesTest/TypeFixtureBase.cs
index 048a3670b2d..6f83d6f8127 100644
--- a/src/NHibernate.Test/TypesTest/TypeFixtureBase.cs
+++ b/src/NHibernate.Test/TypesTest/TypeFixtureBase.cs
@@ -1,6 +1,3 @@
-using System;
-using System.Collections;
-
namespace NHibernate.Test.TypesTest
{
///
@@ -13,20 +10,16 @@ public abstract class TypeFixtureBase : TestCase
{
protected abstract string TypeName { get; }
- protected override string MappingsAssembly
- {
- get { return "NHibernate.Test"; }
- }
+ protected override string MappingsAssembly => "NHibernate.Test";
+
+ protected override string[] Mappings => new[] { $"TypesTest.{TypeName}Class.hbm.xml" };
- protected override string[] Mappings
+ protected override void OnTearDown()
{
- get
- {
- return new string[]
- {
- String.Format("TypesTest.{0}Class.hbm.xml", TypeName)
- };
- }
+ using var s = OpenSession();
+ using var t = s.BeginTransaction();
+ s.CreateQuery($"delete {TypeName}Class").ExecuteUpdate();
+ t.Commit();
}
}
-}
\ No newline at end of file
+}
From 104f437ea6926632f1b641045dcf387ef6377793 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericdelaporte@users.noreply.github.com>
Date: Mon, 5 Feb 2024 19:16:14 +0100
Subject: [PATCH 4/5] Fix test failure on culture casing
---
.../Async/TypesTest/CultureInfoTypeFixture.cs | 8 +++-----
src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs | 8 +++-----
2 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
index a86fac7d458..4ec37748718 100644
--- a/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/CultureInfoTypeFixture.cs
@@ -20,10 +20,7 @@ namespace NHibernate.Test.TypesTest
[TestFixture]
public class CultureInfoTypeFixtureAsync : TypeFixtureBase
{
- protected override string TypeName
- {
- get { return "CultureInfo"; }
- }
+ protected override string TypeName => "CultureInfo";
[Test]
public async Task ReadWriteBasicCultureAsync()
@@ -86,7 +83,8 @@ public async Task ReadWriteExtendedCultureAsync()
{
var entity = await (s.GetAsync(id));
Assert.That(entity.ExtendedCulture, Is.Not.Null);
- Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix"));
+ // Under Windows, it is named en-US-posix, but en-US-POSIX under Linux.
+ Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix").IgnoreCase);
Assert.That(entity.ExtendedCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US-posix")));
await (t.CommitAsync());
}
diff --git a/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs b/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
index 7c7977941fe..d860c04ba1f 100644
--- a/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
+++ b/src/NHibernate.Test/TypesTest/CultureInfoTypeFixture.cs
@@ -9,10 +9,7 @@ namespace NHibernate.Test.TypesTest
[TestFixture]
public class CultureInfoTypeFixture : TypeFixtureBase
{
- protected override string TypeName
- {
- get { return "CultureInfo"; }
- }
+ protected override string TypeName => "CultureInfo";
[Test]
public void ReadWriteBasicCulture()
@@ -75,7 +72,8 @@ public void ReadWriteExtendedCulture()
{
var entity = s.Get(id);
Assert.That(entity.ExtendedCulture, Is.Not.Null);
- Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix"));
+ // Under Windows, it is named en-US-posix, but en-US-POSIX under Linux.
+ Assert.That(entity.ExtendedCulture.Name, Is.EqualTo("en-US-posix").IgnoreCase);
Assert.That(entity.ExtendedCulture, Is.EqualTo(CultureInfo.GetCultureInfo("en-US-posix")));
t.Commit();
}
From 6d6eb282fcd3071b56ea34fba6d871e77001805d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Delaporte?=
<12201973+fredericdelaporte@users.noreply.github.com>
Date: Tue, 6 Feb 2024 10:40:44 +0100
Subject: [PATCH 5/5] Update documentation about CultureInfoType
---
doc/reference/modules/basic_mapping.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/doc/reference/modules/basic_mapping.xml b/doc/reference/modules/basic_mapping.xml
index 122def3f62f..2056bbe27a4 100644
--- a/doc/reference/modules/basic_mapping.xml
+++ b/doc/reference/modules/basic_mapping.xml
@@ -3919,7 +3919,8 @@
CultureInfo
System.Globalization.CultureInfo
- DbType.String - 5 chars for culture
+ DbType.String - 5 chars for culture by default;
+ can be modified by the length mapping attribute.
Default when no type attribute specified.