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;