From dc18939c0e65f74273ab0962d63ef77cc162a49e Mon Sep 17 00:00:00 2001
From: Roman Artiukhin
Date: Wed, 9 Sep 2020 08:18:08 +0300
Subject: [PATCH 1/4] Fix asymmetrical SqlType.Equals
---
src/NHibernate/SqlTypes/SqlType.cs | 42 ++++++++++++++++++------------
1 file changed, 26 insertions(+), 16 deletions(-)
diff --git a/src/NHibernate/SqlTypes/SqlType.cs b/src/NHibernate/SqlTypes/SqlType.cs
index c32c377723c..79ca2e39616 100644
--- a/src/NHibernate/SqlTypes/SqlType.cs
+++ b/src/NHibernate/SqlTypes/SqlType.cs
@@ -21,7 +21,7 @@ namespace NHibernate.SqlTypes
///
///
[Serializable]
- public class SqlType
+ public class SqlType : IEquatable
{
private readonly DbType dbType;
private readonly int length;
@@ -125,24 +125,34 @@ public override bool Equals(object obj)
public bool Equals(SqlType rhsSqlType)
{
+ if (ReferenceEquals(this, rhsSqlType))
+ return true;
+
if (rhsSqlType == null)
- {
return false;
- }
- if (LengthDefined)
- {
- return (DbType.Equals(rhsSqlType.DbType)) && (Length == rhsSqlType.Length);
- }
- if (PrecisionDefined)
- {
- return (DbType.Equals(rhsSqlType.DbType)) && (Precision == rhsSqlType.Precision) && (Scale == rhsSqlType.Scale);
- }
- if (ScaleDefined)
- {
- return DbType.Equals(rhsSqlType.DbType) && Scale == rhsSqlType.Scale;
- }
- return (DbType.Equals(rhsSqlType.DbType));
+ if (DbType != rhsSqlType.DbType)
+ return false;
+
+ if (LengthDefined != rhsSqlType.LengthDefined)
+ return false;
+
+ if (PrecisionDefined != rhsSqlType.PrecisionDefined)
+ return false;
+
+ if (ScaleDefined != rhsSqlType.ScaleDefined)
+ return false;
+
+ if (LengthDefined && Length != rhsSqlType.Length)
+ return false;
+
+ if (PrecisionDefined && Precision != rhsSqlType.Precision)
+ return false;
+
+ if (ScaleDefined && Scale != rhsSqlType.Scale)
+ return false;
+
+ return true;
}
public override string ToString()
From 82136897cb5a80b5aed861d45aedc37df42b37f5 Mon Sep 17 00:00:00 2001
From: Roman Artiukhin
Date: Mon, 14 Sep 2020 09:37:03 +0300
Subject: [PATCH 2/4] Fix tests
---
.../TypesTest/ChangeDefaultTypeWithLengthFixture.cs | 8 ++++----
.../TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithLengthFixture.cs b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithLengthFixture.cs
index b499568f1da..e8fbd52f2db 100644
--- a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithLengthFixture.cs
+++ b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithLengthFixture.cs
@@ -68,16 +68,16 @@ public void PropertyType()
var propertyType25 = Sfi.GetClassMetadata(typeof(ChangeDefaultTypeClass))
.GetPropertyType(nameof(ChangeDefaultTypeClass.StringTypeLengthInType25));
Assert.That(
- propertyType25,
- Is.EqualTo(_testDefaultStringType));
+ propertyType25.GetType(),
+ Is.EqualTo(_testDefaultStringType.GetType()));
Assert.That(propertyType25.SqlTypes(Sfi)[0].Length, Is.EqualTo(25));
var propertyType20 = Sfi.GetClassMetadata(typeof(ChangeDefaultTypeClass))
.GetPropertyType(nameof(ChangeDefaultTypeClass.StringTypeExplicitLength20));
Assert.That(
- propertyType20,
- Is.EqualTo(_testDefaultStringType));
+ propertyType20.GetType(),
+ Is.EqualTo(_testDefaultStringType.GetType()));
Assert.That(propertyType20.SqlTypes(Sfi)[0].Length, Is.EqualTo(20));
}
diff --git a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
index 456a81b8f64..4e81e7a399e 100644
--- a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
+++ b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
@@ -69,8 +69,8 @@ public void PropertyType()
var propertyType1 = Sfi.GetClassMetadata(typeof(ChangeDefaultTypeClass))
.GetPropertyType(nameof(ChangeDefaultTypeClass.CurrencyTypeExplicitPrecision6And3));
Assert.That(
- propertyType1,
- Is.EqualTo(_testDefaultType));
+ propertyType1.GetType(),
+ Is.EqualTo(_testDefaultType.GetType()));
Assert.That(propertyType1.SqlTypes(Sfi)[0].Precision, Is.EqualTo(6));
Assert.That(propertyType1.SqlTypes(Sfi)[0].Scale, Is.EqualTo(3));
From 1b2a870c7253f9d6420e2ad8310f7d8cc8240dbb Mon Sep 17 00:00:00 2001
From: Roman Artiukhin
Date: Mon, 14 Sep 2020 10:39:06 +0300
Subject: [PATCH 3/4] Fix test
---
.../TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
index 4e81e7a399e..2d803f5b4e5 100644
--- a/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
+++ b/src/NHibernate.Test/TypesTest/ChangeDefaultTypeWithPrecisionFixture.cs
@@ -78,8 +78,8 @@ public void PropertyType()
.GetPropertyType(nameof(ChangeDefaultTypeClass.CurrencyTypePrecisionInType5And2));
Assert.That(
- propertyType2,
- Is.EqualTo(_testDefaultType));
+ propertyType2.GetType(),
+ Is.EqualTo(_testDefaultType.GetType()));
Assert.That(propertyType2.SqlTypes(Sfi)[0].Precision, Is.EqualTo(5));
Assert.That(propertyType2.SqlTypes(Sfi)[0].Scale, Is.EqualTo(2));
}
From 6cf057b4a37543197ee8938c38aac54a89b37fb8 Mon Sep 17 00:00:00 2001
From: Roman Artiukhin
Date: Tue, 15 Sep 2020 07:59:03 +0300
Subject: [PATCH 4/4] Code review
---
src/NHibernate/SqlTypes/SqlType.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/NHibernate/SqlTypes/SqlType.cs b/src/NHibernate/SqlTypes/SqlType.cs
index 79ca2e39616..29523e9122e 100644
--- a/src/NHibernate/SqlTypes/SqlType.cs
+++ b/src/NHibernate/SqlTypes/SqlType.cs
@@ -143,13 +143,13 @@ public bool Equals(SqlType rhsSqlType)
if (ScaleDefined != rhsSqlType.ScaleDefined)
return false;
- if (LengthDefined && Length != rhsSqlType.Length)
+ if (Length != rhsSqlType.Length)
return false;
- if (PrecisionDefined && Precision != rhsSqlType.Precision)
+ if (Precision != rhsSqlType.Precision)
return false;
- if (ScaleDefined && Scale != rhsSqlType.Scale)
+ if (Scale != rhsSqlType.Scale)
return false;
return true;