From 56ab58f0e911bd84b05393ba48a6a7e8a6b6101c Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:10:59 +1000 Subject: [PATCH 01/14] Cache zero values to reduce boxing in PrimitiveType.DefaultValue --- src/NHibernate/Type/AbstractCharType.cs | 10 ++---- src/NHibernate/Type/AbstractDateTimeType.cs | 18 +++-------- src/NHibernate/Type/AbstractEnumType.cs | 29 +++++------------ src/NHibernate/Type/ByteType.cs | 36 +++++---------------- src/NHibernate/Type/DateTimeOffSetType.cs | 23 +++---------- src/NHibernate/Type/DateType.cs | 8 ++--- src/NHibernate/Type/DecimalType.cs | 14 +++----- src/NHibernate/Type/DoubleType.cs | 13 +++----- src/NHibernate/Type/GuidType.cs | 12 ++----- src/NHibernate/Type/Int16Type.cs | 10 ++---- src/NHibernate/Type/Int32Type.cs | 14 ++------ src/NHibernate/Type/Int64Type.cs | 13 ++------ src/NHibernate/Type/PrimitiveType.cs | 13 +------- src/NHibernate/Type/SByteType.cs | 13 ++------ src/NHibernate/Type/SingleType.cs | 15 +++------ src/NHibernate/Type/TimeAsTimeSpanType.cs | 20 +++--------- src/NHibernate/Type/TimeSpanType.cs | 13 ++------ src/NHibernate/Type/TimeType.cs | 5 +-- src/NHibernate/Type/UInt16Type.cs | 13 ++------ src/NHibernate/Type/UInt32Type.cs | 13 ++------ src/NHibernate/Type/UInt64Type.cs | 13 ++------ 21 files changed, 77 insertions(+), 241 deletions(-) diff --git a/src/NHibernate/Type/AbstractCharType.cs b/src/NHibernate/Type/AbstractCharType.cs index f813c85fb60..d8b7c0d6a3d 100644 --- a/src/NHibernate/Type/AbstractCharType.cs +++ b/src/NHibernate/Type/AbstractCharType.cs @@ -9,15 +9,9 @@ namespace NHibernate.Type /// Common base class for and . /// [Serializable] - public abstract class AbstractCharType : PrimitiveType, IDiscriminatorType + public abstract class AbstractCharType(SqlType sqlType) : PrimitiveType(sqlType), IDiscriminatorType { - public AbstractCharType(SqlType sqlType) - : base(sqlType) {} - - public override object DefaultValue - { - get { throw new NotSupportedException("not a valid id type"); } - } + public override object DefaultValue => throw new NotSupportedException("not a valid id type"); public override object Get(DbDataReader rs, int index, ISessionImplementor session) { diff --git a/src/NHibernate/Type/AbstractDateTimeType.cs b/src/NHibernate/Type/AbstractDateTimeType.cs index b5b5b5c65c3..b3009c69f13 100644 --- a/src/NHibernate/Type/AbstractDateTimeType.cs +++ b/src/NHibernate/Type/AbstractDateTimeType.cs @@ -12,9 +12,9 @@ namespace NHibernate.Type /// Base class for date time types. /// [Serializable] - public abstract partial class AbstractDateTimeType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType + public abstract partial class AbstractDateTimeType(SqlType sqlTypeDateTime) : PrimitiveType(sqlTypeDateTime), IIdentifierType, ILiteralType, IVersionType { - private static readonly DateTime BaseDateValue = DateTime.MinValue; + private static readonly object BaseDateValue = DateTime.MinValue; /// /// Returns the for the type. @@ -31,18 +31,8 @@ public abstract partial class AbstractDateTimeType : PrimitiveType, IIdentifierT /// otherwise. protected virtual DateTime Now => Kind == DateTimeKind.Utc ? DateTime.UtcNow : DateTime.Now; - /// - /// Default constructor. - /// - protected AbstractDateTimeType() : base(SqlTypeFactory.DateTime) - { - } - - /// - /// Constructor for overriding the default . - /// - /// The to use. - protected AbstractDateTimeType(SqlType sqlTypeDateTime) : base(sqlTypeDateTime) + /// + protected AbstractDateTimeType() : this(SqlTypeFactory.DateTime) { } diff --git a/src/NHibernate/Type/AbstractEnumType.cs b/src/NHibernate/Type/AbstractEnumType.cs index e37ab923d15..65f2f21ea82 100644 --- a/src/NHibernate/Type/AbstractEnumType.cs +++ b/src/NHibernate/Type/AbstractEnumType.cs @@ -9,27 +9,20 @@ namespace NHibernate.Type [Serializable] public abstract class AbstractEnumType : PrimitiveType, IDiscriminatorType { - protected AbstractEnumType(SqlType sqlType,System.Type enumType) - : base(sqlType) + protected AbstractEnumType(SqlType sqlType, System.Type enumType) : base(sqlType) { - if (enumType.IsEnum) - { - this.enumType = enumType; - } - else + if (!enumType.IsEnum) { throw new MappingException(enumType.Name + " did not inherit from System.Enum"); } - defaultValue = Enum.ToObject(enumType, 0); + + this.enumType = enumType; + DefaultValue = Enum.ToObject(enumType, 0); } - private readonly object defaultValue; private readonly System.Type enumType; - public override System.Type ReturnedClass - { - get { return enumType; } - } + public override System.Type ReturnedClass => enumType; #region IIdentifierType Members @@ -50,14 +43,8 @@ public override object FromStringValue(string xml) return StringToObject(xml); } - public override System.Type PrimitiveClass - { - get { return this.enumType; } - } + public override System.Type PrimitiveClass => enumType; - public override object DefaultValue - { - get { return defaultValue; } - } + public override object DefaultValue { get; } } } diff --git a/src/NHibernate/Type/ByteType.cs b/src/NHibernate/Type/ByteType.cs index 4a1e5fa7928..16d03bb3db9 100644 --- a/src/NHibernate/Type/ByteType.cs +++ b/src/NHibernate/Type/ByteType.cs @@ -13,14 +13,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class ByteType : PrimitiveType, IDiscriminatorType, IVersionType + public partial class ByteType() : PrimitiveType(SqlTypeFactory.Byte), IDiscriminatorType, IVersionType { - private static readonly byte ZERO = 0; - - public ByteType() - : base(SqlTypeFactory.Byte) - { - } + private static readonly object ZeroObject = (byte) 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -32,15 +27,9 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi }; } - public override System.Type ReturnedClass - { - get { return typeof(byte); } - } + public override System.Type ReturnedClass => typeof(byte); - public override System.Type PrimitiveClass - { - get { return typeof(byte); } - } + public override System.Type PrimitiveClass => typeof(byte); public override void Set(DbCommand cmd, object value, int index, ISessionImplementor session) { @@ -48,10 +37,7 @@ public override void Set(DbCommand cmd, object value, int index, ISessionImpleme dp.Value = dp.DbType == DbType.Int16 ? Convert.ToInt16(value) : Convert.ToByte(value); } - public override string Name - { - get { return "Byte"; } - } + public override string Name => "Byte"; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { @@ -84,17 +70,11 @@ public virtual object Next(object current, ISessionImplementor session) public virtual object Seed(ISessionImplementor session) { - return ZERO; + return ZeroObject; } - public IComparer Comparator - { - get { return Comparer.DefaultInvariant; } - } + public IComparer Comparator => Comparer.DefaultInvariant; - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; } } diff --git a/src/NHibernate/Type/DateTimeOffSetType.cs b/src/NHibernate/Type/DateTimeOffSetType.cs index de9e8b2216c..2ccc5bbe71b 100644 --- a/src/NHibernate/Type/DateTimeOffSetType.cs +++ b/src/NHibernate/Type/DateTimeOffSetType.cs @@ -12,22 +12,12 @@ namespace NHibernate.Type /// Maps a Property to a /// [Serializable] - public partial class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType + public partial class DateTimeOffsetType(DateTimeOffsetSqlType sqlType) + : PrimitiveType(sqlType), IIdentifierType, ILiteralType, IVersionType { - static readonly DateTimeOffset BaseDateValue = DateTimeOffset.MinValue; + private static readonly object BaseDateValue = DateTimeOffset.MinValue; - /// - /// Default constructor. - /// - public DateTimeOffsetType() : base(SqlTypeFactory.DateTimeOffSet) - { - } - - /// - /// Constructor for specifying a datetimeoffset with a scale. Use . - /// - /// The sql type to use for the type. - public DateTimeOffsetType(DateTimeOffsetSqlType sqlType) : base(sqlType) + public DateTimeOffsetType() : this((DateTimeOffsetSqlType) SqlTypeFactory.DateTimeOffSet) { } @@ -46,10 +36,7 @@ public override System.Type PrimitiveClass get { return typeof (DateTimeOffset); } } - public override object DefaultValue - { - get { return BaseDateValue; } - } + public override object DefaultValue => BaseDateValue; public IComparer Comparator { diff --git a/src/NHibernate/Type/DateType.cs b/src/NHibernate/Type/DateType.cs index 76d3fbb99e9..1bea11def0a 100644 --- a/src/NHibernate/Type/DateType.cs +++ b/src/NHibernate/Type/DateType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type /// column /// [Serializable] - public class DateType : AbstractDateTimeType, IParameterizedType + public class DateType() : AbstractDateTimeType(SqlTypeFactory.Date), IParameterizedType { private static readonly INHibernateLogger _log = NHibernateLogger.For(typeof(DateType)); // Since v5.0 @@ -21,14 +21,10 @@ public class DateType : AbstractDateTimeType, IParameterizedType // Since v5.0 [Obsolete("Use DateTime.MinValue.")] public static readonly DateTime BaseDateValue = DateTime.MinValue; - private DateTime customBaseDate = _baseDateValue; private static readonly DateTime _baseDateValue = DateTime.MinValue; - /// Default constructor - public DateType() : base(SqlTypeFactory.Date) - { - } + private object customBaseDate = _baseDateValue; /// public override string Name => "Date"; diff --git a/src/NHibernate/Type/DecimalType.cs b/src/NHibernate/Type/DecimalType.cs index 06fb8d449d9..67e22861cbd 100644 --- a/src/NHibernate/Type/DecimalType.cs +++ b/src/NHibernate/Type/DecimalType.cs @@ -11,17 +11,16 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class DecimalType : PrimitiveType, IIdentifierType + public class DecimalType(SqlType sqlType) : PrimitiveType(sqlType), IIdentifierType { + private static readonly object ZeroObject = 0m; + + /// public DecimalType() : this(SqlTypeFactory.Decimal) { } - public DecimalType(SqlType sqlType) : base(sqlType) - { - } - public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return Convert.ToDecimal(rs[index]); @@ -47,10 +46,7 @@ public override System.Type PrimitiveClass get { return typeof (Decimal); } } - public override object DefaultValue - { - get { return 0m; } - } + public override object DefaultValue => ZeroObject; // Since 5.2 [Obsolete("This method has no more usages and will be removed in a future version.")] diff --git a/src/NHibernate/Type/DoubleType.cs b/src/NHibernate/Type/DoubleType.cs index fb5c159c9aa..1cf8450fffc 100644 --- a/src/NHibernate/Type/DoubleType.cs +++ b/src/NHibernate/Type/DoubleType.cs @@ -12,15 +12,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class DoubleType : PrimitiveType + public class DoubleType(SqlType sqlType) : PrimitiveType(sqlType) { + private static readonly object ZeroObject = 0D; + /// - public DoubleType() : base(SqlTypeFactory.Double) + public DoubleType() : this(SqlTypeFactory.Double) { } - public DoubleType(SqlType sqlType) : base(sqlType) {} - public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return rs[index] switch @@ -59,10 +59,7 @@ public override System.Type PrimitiveClass get { return typeof(double); } } - public override object DefaultValue - { - get { return 0D; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/GuidType.cs b/src/NHibernate/Type/GuidType.cs index 938a5436af4..f957c886b14 100644 --- a/src/NHibernate/Type/GuidType.cs +++ b/src/NHibernate/Type/GuidType.cs @@ -11,12 +11,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class GuidType : PrimitiveType, IDiscriminatorType + public class GuidType() : PrimitiveType(SqlTypeFactory.Guid), IDiscriminatorType { - /// - public GuidType() : base(SqlTypeFactory.Guid) - { - } + private static readonly object EmptyObject = Guid.Empty; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -76,10 +73,7 @@ public override System.Type PrimitiveClass get { return typeof(Guid); } } - public override object DefaultValue - { - get { return Guid.Empty; } - } + public override object DefaultValue => EmptyObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/Int16Type.cs b/src/NHibernate/Type/Int16Type.cs index 20d2975f0d8..ae304517710 100644 --- a/src/NHibernate/Type/Int16Type.cs +++ b/src/NHibernate/Type/Int16Type.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int16Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class Int16Type() : PrimitiveType(SqlTypeFactory.Int16), IDiscriminatorType, IVersionType { - /// - public Int16Type() : base(SqlTypeFactory.Int16) - { - } + private static readonly object ZeroObject = (short) 0; /// public override string Name @@ -27,7 +24,6 @@ public override string Name get { return "Int16"; } } - private static readonly Int16 ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -102,7 +98,7 @@ public override System.Type PrimitiveClass public override object DefaultValue { - get { return ZERO; } + get { return ZeroObject; } } public override string ObjectToSQLString(object value, Dialect.Dialect dialect) diff --git a/src/NHibernate/Type/Int32Type.cs b/src/NHibernate/Type/Int32Type.cs index 21c568ffb3a..9e363a1f9ce 100644 --- a/src/NHibernate/Type/Int32Type.cs +++ b/src/NHibernate/Type/Int32Type.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int32Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class Int32Type() : PrimitiveType(SqlTypeFactory.Int32), IDiscriminatorType, IVersionType { - /// - public Int32Type() : base(SqlTypeFactory.Int32) - { - } + private static readonly object ZeroObject = 0; /// public override string Name @@ -27,8 +24,6 @@ public override string Name get { return "Int32"; } } - private static readonly Int32 ZERO = 0; - public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -101,10 +96,7 @@ public override System.Type PrimitiveClass get { return typeof(Int32); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/Int64Type.cs b/src/NHibernate/Type/Int64Type.cs index 42899a25794..2bb559346c3 100644 --- a/src/NHibernate/Type/Int64Type.cs +++ b/src/NHibernate/Type/Int64Type.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int64Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class Int64Type() : PrimitiveType(SqlTypeFactory.Int64), IDiscriminatorType, IVersionType { - /// - public Int64Type() : base(SqlTypeFactory.Int64) - { - } + private static readonly object ZeroObject = (Int64) 0; /// public override string Name @@ -27,7 +24,6 @@ public override string Name get { return "Int64"; } } - private static readonly Int64 ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -100,10 +96,7 @@ public override System.Type PrimitiveClass get { return typeof(Int64); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/PrimitiveType.cs b/src/NHibernate/Type/PrimitiveType.cs index 7b452db3481..834bbd9d812 100644 --- a/src/NHibernate/Type/PrimitiveType.cs +++ b/src/NHibernate/Type/PrimitiveType.cs @@ -8,21 +8,12 @@ namespace NHibernate.Type /// Superclass of types. /// [Serializable] - public abstract class PrimitiveType : ImmutableType, ILiteralType + public abstract class PrimitiveType(SqlType sqlType) : ImmutableType(sqlType), ILiteralType { - /// - /// Initialize a new instance of the PrimitiveType class using a . - /// - /// The underlying . - protected PrimitiveType(SqlType sqlType) - : base(sqlType) {} - public abstract System.Type PrimitiveClass { get; } public abstract object DefaultValue { get; } - #region ILiteralType Members - /// /// When implemented by a class, return a representation /// of the value, suitable for embedding in an SQL statement @@ -32,8 +23,6 @@ protected PrimitiveType(SqlType sqlType) /// A string that containts a well formed SQL Statement. public abstract string ObjectToSQLString(object value, Dialect.Dialect dialect); - #endregion - /// public override string ToLoggableString(object value, ISessionFactoryImplementor factory) { diff --git a/src/NHibernate/Type/SByteType.cs b/src/NHibernate/Type/SByteType.cs index 304a034958c..7e6486dba89 100644 --- a/src/NHibernate/Type/SByteType.cs +++ b/src/NHibernate/Type/SByteType.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class SByteType : PrimitiveType, IDiscriminatorType + public class SByteType() : PrimitiveType(SqlTypeFactory.SByte), IDiscriminatorType { - /// - public SByteType() : base(SqlTypeFactory.SByte) - { - } + private static readonly object ZeroObject = (sbyte) 0; /// public override string Name @@ -27,7 +24,6 @@ public override string Name get { return "SByte"; } } - private static readonly SByte ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -102,10 +98,7 @@ public override System.Type PrimitiveClass get { return typeof(SByte); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/SingleType.cs b/src/NHibernate/Type/SingleType.cs index 31166b2b925..509ed6834dd 100644 --- a/src/NHibernate/Type/SingleType.cs +++ b/src/NHibernate/Type/SingleType.cs @@ -16,22 +16,20 @@ namespace NHibernate.Type /// matches up with the capabilities of /// [Serializable] - public class SingleType : PrimitiveType + public class SingleType(SqlType sqlType) : PrimitiveType(sqlType) { - /// - public SingleType() : base(SqlTypeFactory.Single) + private static readonly object ZeroObject = (float) 0; + + public SingleType() : this(SqlTypeFactory.Single) { } - public SingleType(SqlType sqlType) : base(sqlType) {} - /// public override string Name { get { return "Single"; } } - private static readonly Single ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -77,10 +75,7 @@ public override System.Type PrimitiveClass get { return typeof(Single); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Type/TimeAsTimeSpanType.cs index 993262af202..2115e64f06b 100644 --- a/src/NHibernate/Type/TimeAsTimeSpanType.cs +++ b/src/NHibernate/Type/TimeAsTimeSpanType.cs @@ -14,22 +14,13 @@ namespace NHibernate.Type /// but mapping against a . /// [Serializable] - public partial class TimeAsTimeSpanType : PrimitiveType, IVersionType + public partial class TimeAsTimeSpanType(TimeSqlType sqlType) : PrimitiveType(sqlType), IVersionType { + private static readonly object ZeroObject = TimeSpan.Zero; private static readonly DateTime BaseDateValue = new DateTime(1753, 01, 01); - /// - /// Default constructor. - /// - public TimeAsTimeSpanType() : base(SqlTypeFactory.Time) - { - } - /// - /// Constructor for specifying a time with a scale. Use . - /// - /// The sql type to use for the type. - public TimeAsTimeSpanType(TimeSqlType sqlType) : base(sqlType) + public TimeAsTimeSpanType() : this((TimeSqlType) SqlTypeFactory.Time) { } @@ -129,10 +120,7 @@ public override System.Type PrimitiveClass get { return typeof(TimeSpan); } } - public override object DefaultValue - { - get { return TimeSpan.Zero; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/TimeSpanType.cs b/src/NHibernate/Type/TimeSpanType.cs index 5123362a34a..5f2acd5d1d4 100644 --- a/src/NHibernate/Type/TimeSpanType.cs +++ b/src/NHibernate/Type/TimeSpanType.cs @@ -12,13 +12,9 @@ namespace NHibernate.Type /// Maps a Property to an column /// [Serializable] - public partial class TimeSpanType : PrimitiveType, IVersionType, ILiteralType + public partial class TimeSpanType() : PrimitiveType(SqlTypeFactory.Int64), IVersionType, ILiteralType { - /// - public TimeSpanType() - : base(SqlTypeFactory.Int64) - { - } + private static readonly object ZeroObject = TimeSpan.Zero; /// public override string Name @@ -109,10 +105,7 @@ public override System.Type PrimitiveClass get { return typeof(TimeSpan); } } - public override object DefaultValue - { - get { return TimeSpan.Zero; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/TimeType.cs b/src/NHibernate/Type/TimeType.cs index c095ef0c0d2..cd66cc0200b 100644 --- a/src/NHibernate/Type/TimeType.cs +++ b/src/NHibernate/Type/TimeType.cs @@ -160,10 +160,7 @@ public override System.Type PrimitiveClass get { return typeof(DateTime); } } - public override object DefaultValue - { - get { return BaseDateValue; } - } + public override object DefaultValue => BaseDateValue; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/UInt16Type.cs b/src/NHibernate/Type/UInt16Type.cs index ae50718c1e2..b8b1201aa95 100644 --- a/src/NHibernate/Type/UInt16Type.cs +++ b/src/NHibernate/Type/UInt16Type.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt16Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class UInt16Type() : PrimitiveType(SqlTypeFactory.UInt16), IDiscriminatorType, IVersionType { - /// - public UInt16Type() : base(SqlTypeFactory.UInt16) - { - } + private static readonly object ZeroObject = (ushort) 0; /// public override string Name @@ -27,7 +24,6 @@ public override string Name get { return "UInt16"; } } - private static readonly UInt16 ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -100,10 +96,7 @@ public override System.Type PrimitiveClass get { return typeof(UInt16); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/UInt32Type.cs b/src/NHibernate/Type/UInt32Type.cs index 0aa02ca8722..5adca799dab 100644 --- a/src/NHibernate/Type/UInt32Type.cs +++ b/src/NHibernate/Type/UInt32Type.cs @@ -14,12 +14,9 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt32Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class UInt32Type() : PrimitiveType(SqlTypeFactory.UInt32), IDiscriminatorType, IVersionType { - /// - public UInt32Type() : base(SqlTypeFactory.UInt32) - { - } + private static readonly object ZeroObject = (UInt32) 0; /// public override string Name @@ -27,7 +24,6 @@ public override string Name get { return "UInt32"; } } - private static readonly UInt32 ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -100,10 +96,7 @@ public override System.Type PrimitiveClass get { return typeof(UInt32); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/UInt64Type.cs b/src/NHibernate/Type/UInt64Type.cs index 8c1064f6f8a..18188b840cc 100644 --- a/src/NHibernate/Type/UInt64Type.cs +++ b/src/NHibernate/Type/UInt64Type.cs @@ -14,19 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt64Type : PrimitiveType, IDiscriminatorType, IVersionType + public partial class UInt64Type() : PrimitiveType(SqlTypeFactory.UInt64), IDiscriminatorType, IVersionType { - /// - public UInt64Type() : base(SqlTypeFactory.UInt64) - { - } + private static readonly object ZeroObject = (UInt32) 0; public override string Name { get { return "UInt64"; } } - private static readonly UInt32 ZERO = 0; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { try @@ -99,10 +95,7 @@ public override System.Type PrimitiveClass get { return typeof(UInt64); } } - public override object DefaultValue - { - get { return ZERO; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { From 48738c89b918c66c3f2061e958be085de4303f29 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:17:55 +1000 Subject: [PATCH 02/14] Revert insignificant changes --- src/NHibernate/Type/AbstractEnumType.cs | 29 ++++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/NHibernate/Type/AbstractEnumType.cs b/src/NHibernate/Type/AbstractEnumType.cs index 65f2f21ea82..e37ab923d15 100644 --- a/src/NHibernate/Type/AbstractEnumType.cs +++ b/src/NHibernate/Type/AbstractEnumType.cs @@ -9,20 +9,27 @@ namespace NHibernate.Type [Serializable] public abstract class AbstractEnumType : PrimitiveType, IDiscriminatorType { - protected AbstractEnumType(SqlType sqlType, System.Type enumType) : base(sqlType) + protected AbstractEnumType(SqlType sqlType,System.Type enumType) + : base(sqlType) { - if (!enumType.IsEnum) + if (enumType.IsEnum) + { + this.enumType = enumType; + } + else { throw new MappingException(enumType.Name + " did not inherit from System.Enum"); } - - this.enumType = enumType; - DefaultValue = Enum.ToObject(enumType, 0); + defaultValue = Enum.ToObject(enumType, 0); } + private readonly object defaultValue; private readonly System.Type enumType; - public override System.Type ReturnedClass => enumType; + public override System.Type ReturnedClass + { + get { return enumType; } + } #region IIdentifierType Members @@ -43,8 +50,14 @@ public override object FromStringValue(string xml) return StringToObject(xml); } - public override System.Type PrimitiveClass => enumType; + public override System.Type PrimitiveClass + { + get { return this.enumType; } + } - public override object DefaultValue { get; } + public override object DefaultValue + { + get { return defaultValue; } + } } } From 8d6ed24a4fd3f9a93132db203a6cf038e2089918 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:18:03 +1000 Subject: [PATCH 03/14] Fix type --- src/NHibernate/Type/UInt64Type.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate/Type/UInt64Type.cs b/src/NHibernate/Type/UInt64Type.cs index 18188b840cc..7085a8a8a74 100644 --- a/src/NHibernate/Type/UInt64Type.cs +++ b/src/NHibernate/Type/UInt64Type.cs @@ -16,7 +16,7 @@ namespace NHibernate.Type [Serializable] public partial class UInt64Type() : PrimitiveType(SqlTypeFactory.UInt64), IDiscriminatorType, IVersionType { - private static readonly object ZeroObject = (UInt32) 0; + private static readonly object ZeroObject = (UInt64) 0; public override string Name { From ca798c8206139ccaa6595149377e43bb0543ce94 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 23 May 2024 02:20:06 +0000 Subject: [PATCH 04/14] Generate async files --- .../Async/Linq/ByMethod/MappedAsTests.cs | 52 ----- src/NHibernate.Test/Async/Linq/WhereTests.cs | 18 -- .../Dates/DateTimeOffsetFixture.cs | 18 -- .../NH3961/DateParametersComparedTo.cs | 195 ------------------ .../TypesTest/AbstractDateTimeTypeFixture.cs | 28 --- .../TypesTest/DateTimeOffsetTypeFixture.cs | 17 -- .../Async/TypesTest/Int16TypeFixture.cs | 43 ---- .../Async/TypesTest/Int32TypeFixture.cs | 43 ---- .../Async/TypesTest/Int64TypeFixture.cs | 61 ------ .../TypesTest/TimeAsTimeSpanTypeFixture.cs | 26 --- .../Async/TypesTest/TimeSpanTypeFixture.cs | 26 --- src/NHibernate/Async/Engine/Versioning.cs | 90 -------- .../Default/AbstractSaveEventListener.cs | 31 +-- .../DefaultFlushEntityEventListener.cs | 37 +--- .../Default/DefaultReplicateEventListener.cs | 16 -- .../Async/Impl/StatelessSessionImpl.cs | 6 +- .../VersionTypeSeedParameterSpecification.cs | 18 +- .../Entity/AbstractEntityPersister.cs | 2 +- .../Async/Type/AbstractBinaryType.cs | 67 ------ .../Async/Type/AbstractDateTimeType.cs | 51 ----- src/NHibernate/Async/Type/ByteType.cs | 58 ------ src/NHibernate/Async/Type/CustomType.cs | 40 ---- src/NHibernate/Async/Type/DateTimeNoMsType.cs | 42 ---- .../Async/Type/DateTimeOffSetType.cs | 52 ----- src/NHibernate/Async/Type/DbTimestampType.cs | 4 +- src/NHibernate/Async/Type/EnumCharType.cs | 55 ----- src/NHibernate/Async/Type/EnumStringType.cs | 64 ------ src/NHibernate/Async/Type/IVersionType.cs | 37 ---- src/NHibernate/Async/Type/Int16Type.cs | 63 ------ src/NHibernate/Async/Type/Int32Type.cs | 63 ------ src/NHibernate/Async/Type/Int64Type.cs | 63 ------ .../Async/Type/PersistentEnumType.cs | 56 ----- src/NHibernate/Async/Type/TicksType.cs | 44 ---- .../Async/Type/TimeAsTimeSpanType.cs | 55 ----- src/NHibernate/Async/Type/TimeSpanType.cs | 56 ----- src/NHibernate/Async/Type/UInt16Type.cs | 63 ------ src/NHibernate/Async/Type/UInt32Type.cs | 63 ------ src/NHibernate/Async/Type/UInt64Type.cs | 63 ------ 38 files changed, 22 insertions(+), 1764 deletions(-) delete mode 100644 src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs delete mode 100644 src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs delete mode 100644 src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs delete mode 100644 src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs delete mode 100644 src/NHibernate/Async/Engine/Versioning.cs delete mode 100644 src/NHibernate/Async/Type/AbstractBinaryType.cs delete mode 100644 src/NHibernate/Async/Type/AbstractDateTimeType.cs delete mode 100644 src/NHibernate/Async/Type/ByteType.cs delete mode 100644 src/NHibernate/Async/Type/DateTimeNoMsType.cs delete mode 100644 src/NHibernate/Async/Type/DateTimeOffSetType.cs delete mode 100644 src/NHibernate/Async/Type/EnumCharType.cs delete mode 100644 src/NHibernate/Async/Type/EnumStringType.cs delete mode 100644 src/NHibernate/Async/Type/IVersionType.cs delete mode 100644 src/NHibernate/Async/Type/Int16Type.cs delete mode 100644 src/NHibernate/Async/Type/Int32Type.cs delete mode 100644 src/NHibernate/Async/Type/Int64Type.cs delete mode 100644 src/NHibernate/Async/Type/PersistentEnumType.cs delete mode 100644 src/NHibernate/Async/Type/TicksType.cs delete mode 100644 src/NHibernate/Async/Type/TimeAsTimeSpanType.cs delete mode 100644 src/NHibernate/Async/Type/TimeSpanType.cs delete mode 100644 src/NHibernate/Async/Type/UInt16Type.cs delete mode 100644 src/NHibernate/Async/Type/UInt32Type.cs delete mode 100644 src/NHibernate/Async/Type/UInt64Type.cs diff --git a/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs b/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs deleted file mode 100644 index af79cd5f272..00000000000 --- a/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs +++ /dev/null @@ -1,52 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections.Generic; -using System.Linq; -using System.Text; -using NHibernate.Linq; -using NUnit.Framework; - -namespace NHibernate.Test.Linq.ByMethod -{ - using System.Threading.Tasks; - [TestFixture] - public class MappedAsTestsAsync : LinqTestCase - { - [Test] - public async Task WithUnaryExpressionAsync() - { - var num = 1; - await (db.Orders.Where(o => o.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); - await (db.Orders.Where(o => o.Freight == ((decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); - await (db.Orders.Where(o => o.Freight == ((decimal?) (decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); - } - - [Test] - public async Task WithNewExpressionAsync() - { - var num = 1; - await (db.Orders.Where(o => o.Freight == new decimal(num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); - } - - [Test] - public async Task WithMethodCallExpressionAsync() - { - var num = 1; - await (db.Orders.Where(o => o.Freight == GetDecimal(num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); - } - - private decimal GetDecimal(int number) - { - return number; - } - } -} diff --git a/src/NHibernate.Test/Async/Linq/WhereTests.cs b/src/NHibernate.Test/Async/Linq/WhereTests.cs index 47809de4738..64d4ee9597f 100644 --- a/src/NHibernate.Test/Async/Linq/WhereTests.cs +++ b/src/NHibernate.Test/Async/Linq/WhereTests.cs @@ -698,24 +698,6 @@ public async Task TimesheetsWithProjectionInSubqueryAsync() Assert.That(query.Count, Is.EqualTo(2)); } - [Test] - public async Task ContainsSubqueryWithCoalesceStringEnumSelectAsync() - { - if (Dialect is MsSqlCeDialect || Dialect is SQLiteDialect) - Assert.Ignore("Dialect is not supported"); - - var results = - await (db.Timesheets.Where( - o => - o.Users - .Where(u => u.Id != 0.MappedAs(NHibernateUtil.Int32)) - .Select(u => u.Name == u.Name ? u.Enum1 : u.NullableEnum1.Value) - .Contains(EnumStoredAsString.Small)) - .ToListAsync()); - - Assert.That(results.Count, Is.EqualTo(1)); - } - [Test] public async Task SearchOnObjectTypeWithExtensionMethodAsync() { diff --git a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs index d9e4bfce8e4..fa11a5bd0a1 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs @@ -22,7 +22,6 @@ namespace NHibernate.Test.NHSpecificTest.Dates { using System.Threading.Tasks; - using System.Threading; [TestFixture] public class DateTimeOffsetFixtureAsync : FixtureBaseAsync { @@ -76,22 +75,5 @@ public async Task SavingAndRetrievingTestAsync() await (tx.CommitAsync()); } } - - [Test] - public async Task NextAsync() - { - var type = NHibernateUtil.DateTimeOffset; - var current = DateTimeOffset.Now.AddTicks(-1); - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.That(next, Is.TypeOf().And.Property("Ticks").GreaterThan(current.Ticks)); - } - - [Test] - public async Task SeedAsync() - { - var type = NHibernateUtil.DateTimeOffset; - Assert.That(await (type.SeedAsync(null, CancellationToken.None)), Is.TypeOf()); - } } } diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs index d2340d2098d..47ea9752af6 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs @@ -65,103 +65,6 @@ protected override void OnTearDown() CultureInfo.CurrentUICulture = _backupUICulture; } - // Non-reg test case - [Test] - public async Task NonNullableMappedAsDateShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.Date)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Non-reg test case - [Test] - public async Task NonNullableMappedAsDateShouldIgnoreTimeAsync() - { - using (ISession session = OpenSession()) - { - var result = await (session.Query() - .Where(e => e.NonNullableDateTime == _testDate.AddMinutes(10).MappedAs(NHibernateUtil.Date)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Non-reg test case - [Test] - public async Task NonNullableMappedAsDateTimeShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Non-reg test case - [Test] - [Obsolete] - public async Task NonNullableMappedAsTimestampShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.Timestamp)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Non-reg test case - [Test] - public async Task NonNullableParameterValueShouldNotBeCachedWithMappedAsAndAsync() - { - // Dodges the query parameter formatting bug for showcasing the parameter value bug - CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); - CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; - try - { - using (ISession session = OpenSession()) - { - var result = await (session.Query() - .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - - var testDate = _testDate.AddMinutes(10); - result = await (session.Query() - .Where(e => e.NonNullableDateTime == testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - CollectionAssert.IsEmpty(result); - } - } - finally - { - CultureInfo.CurrentCulture = _testCulture; - CultureInfo.CurrentUICulture = _testCulture; - } - } - // Non-reg test case [Test] public async Task NonNullableShouldBeCultureAgnosticAsync() @@ -178,104 +81,6 @@ public async Task NonNullableShouldBeCultureAgnosticAsync() } } - // Failing test case till NH-3961 is fixed - [Test] - public async Task NullableMappedAsDateShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.Date)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Failing test case till NH-3961 is fixed - [Test] - public async Task NullableMappedAsDateShouldIgnoreTimeAsync() - { - var testDate = _testDate.AddMinutes(10); - using (ISession session = OpenSession()) - { - var result = await (session.Query() - .Where(e => e.NullableDateTime == testDate.MappedAs(NHibernateUtil.Date)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Failing test case till NH-3961 is fixed - [Test] - public async Task NullableMappedAsDateTimeShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Failing test case till NH-3961 is fixed - [Test] - [Obsolete] - public async Task NullableMappedAsTimestampShouldBeCultureAgnosticAsync() - { - using (ISession session = OpenSession()) - using (session.BeginTransaction()) - { - var result = await (session.Query() - .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.Timestamp)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - } - } - - // Failing test case till NH-3961 is fixed - [Test] - public async Task NullableParameterValueShouldNotBeCachedWithMappedAsAsync() - { - // Dodges the query parameter formatting bug for showcasing the parameter value bug - CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); - CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; - try - { - using (ISession session = OpenSession()) - { - var result = await (session.Query() - .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - Assert.AreEqual(1, result.Count); - Assert.AreEqual("Bob", result[0].Name); - - var testDate = _testDate.AddMinutes(10); - result = await (session.Query() - .Where(e => e.NullableDateTime == testDate.MappedAs(NHibernateUtil.DateTime)) - .ToListAsync()); - - CollectionAssert.IsEmpty(result); - } - } - finally - { - CultureInfo.CurrentCulture = _testCulture; - CultureInfo.CurrentUICulture = _testCulture; - } - } - // Non-reg test case [Test] public async Task NullableShouldBeCultureAgnosticAsync() diff --git a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs index 4307080f4cf..e57990472ec 100644 --- a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs @@ -28,7 +28,6 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; - using System.Threading; [TestFixture] public abstract class AbstractDateTimeTypeFixtureAsync : TypeFixtureBase { @@ -81,33 +80,6 @@ protected override void DropSchema() base.DropSchema(); } - [Test] - public async Task NextAsync() - { - // Take some margin, as DbTimestampType takes its next value from the database, which - // may have its clock a bit shifted even if running on the same server. (Seen with PostgreSQL, - // off by a few seconds, and with SAP HANA running in a vm, off by twenty seconds.) - var current = Now.Subtract(TimeSpan.FromMinutes(2)); - var next = await (Type.NextAsync(current, null, CancellationToken.None)); - - Assert.That(next, Is.TypeOf(), "next should be DateTime"); - Assert.That(next, Is.GreaterThan(current), "next should be greater than current"); - } - - [Test] - public async Task SeedAsync() - { - Assert.That(await (Type.SeedAsync(null, CancellationToken.None)), Is.TypeOf(), "seed should be DateTime"); - } - - [Test] - public async Task ComparerAsync() - { - var v1 = await (Type.SeedAsync(null, CancellationToken.None)); - var v2 = Now.Subtract(TimeSpan.FromTicks(DateAccuracyInTicks)); - Assert.That(() => Type.Comparator.Compare(v1, v2), Throws.Nothing); - } - [Test] [TestCase(DateTimeKind.Unspecified)] [TestCase(DateTimeKind.Local)] diff --git a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs index 1c604513d85..80b66c4671e 100644 --- a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs @@ -22,7 +22,6 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; - using System.Threading; [TestFixture] public class DateTimeOffsetTypeFixtureAsync : TypeFixtureBase { @@ -75,22 +74,6 @@ protected override void DropSchema() base.DropSchema(); } - [Test] - public async Task NextAsync() - { - var current = DateTimeOffset.Parse("2004-01-01"); - var next = await (Type.NextAsync(current, null, CancellationToken.None)); - - Assert.That(next, Is.TypeOf(), "next should be DateTimeOffset"); - Assert.That(next, Is.GreaterThan(current), "next should be greater than current"); - } - - [Test] - public async Task SeedAsync() - { - Assert.That(await (Type.SeedAsync(null, CancellationToken.None)), Is.TypeOf(), "seed should be DateTime"); - } - [Test] public async Task ReadWriteAsync() { diff --git a/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs deleted file mode 100644 index 8983ffef5c3..00000000000 --- a/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs +++ /dev/null @@ -1,43 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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 NHibernate.Type; -using NUnit.Framework; - -namespace NHibernate.Test.TypesTest -{ - using System.Threading.Tasks; - using System.Threading; - /// - /// Summary description for Int16TypeFixture. - /// - [TestFixture] - public class Int16TypeFixtureAsync - { - [Test] - public async Task NextAsync() - { - Int16Type type = (Int16Type) NHibernateUtil.Int16; - object current = (short) 1; - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.IsTrue(next is Int16, "Next should be Int16"); - Assert.AreEqual((short) 2, (short) next, "current should have been incremented to 2"); - } - - [Test] - public async Task SeedAsync() - { - Int16Type type = (Int16Type) NHibernateUtil.Int16; - Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int16, "seed should be int16"); - } - } -} \ No newline at end of file diff --git a/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs deleted file mode 100644 index ec6a264e176..00000000000 --- a/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs +++ /dev/null @@ -1,43 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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 NHibernate.Type; -using NUnit.Framework; - -namespace NHibernate.Test.TypesTest -{ - using System.Threading.Tasks; - using System.Threading; - /// - /// Summary description for Int32TypeFixture. - /// - [TestFixture] - public class Int32TypeFixtureAsync - { - [Test] - public async Task NextAsync() - { - Int32Type type = (Int32Type) NHibernateUtil.Int32; - object current = (int) 1; - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.IsTrue(next is Int32, "Next should be Int32"); - Assert.AreEqual((int) 2, (int) next, "current should have been incremented to 2"); - } - - [Test] - public async Task SeedAsync() - { - Int32Type type = (Int32Type) NHibernateUtil.Int32; - Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int32, "seed should be Int32"); - } - } -} \ No newline at end of file diff --git a/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs deleted file mode 100644 index c0bf51f59cb..00000000000 --- a/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs +++ /dev/null @@ -1,61 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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 NHibernate.Type; -using NUnit.Framework; -using NHibernate.Engine; - -namespace NHibernate.Test.TypesTest -{ - using System.Threading.Tasks; - using System.Threading; - /// - /// Summary description for Int64TypeFixture. - /// - [TestFixture] - public class Int64TypeFixtureAsync: TestCase - { - [Test] - public async Task NextAsync() - { - Int64Type type = NHibernateUtil.Int64; - object current = (long)1; - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.IsTrue(next is Int64, "Next should be Int64"); - Assert.AreEqual((long)2, (long)next, "current should have been incremented to 2"); - } - - [Test] - public async Task SeedAsync() - { - Int64Type type = NHibernateUtil.Int64; - Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int64, "seed should be int64"); - } - - [Test] - public async Task NullableWrapperDirtyAsync() - { - Int64Type type = NHibernateUtil.Int64; - - long? nullLong = null; - long? valueLong = 5; - long? fiveAgain = 5; - using (ISession s = OpenSession()) - { - Assert.IsTrue(await (type.IsDirtyAsync(nullLong, valueLong, (ISessionImplementor)s, CancellationToken.None)), "should be dirty - null to '5'"); - Assert.IsFalse(await (type.IsDirtyAsync(valueLong, fiveAgain, (ISessionImplementor)s, CancellationToken.None)), "should not be dirty - 5 to 5"); - } - } - - protected override string[] Mappings => Array.Empty(); - } -} diff --git a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs index f9c585d7956..c65ba8150c2 100644 --- a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs @@ -15,32 +15,6 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; - using System.Threading; - /// - /// Summary description for TimeAsTimeSpanTypeFixture. - /// - [TestFixture] - public class TimeAsTimeSpanTypeFixtureAsync - { - [Test] - public async Task NextAsync() - { - var type = (TimeAsTimeSpanType) NHibernateUtil.TimeAsTimeSpan; - object current = new TimeSpan(DateTime.Now.Ticks - 5); - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.IsTrue(next is TimeSpan, "Next should be TimeSpan"); - Assert.IsTrue((TimeSpan) next > (TimeSpan) current, - "next should be greater than current (could be equal depending on how quickly this occurs)"); - } - - [Test] - public async Task SeedAsync() - { - var type = (TimeAsTimeSpanType) NHibernateUtil.TimeAsTimeSpan; - Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is TimeSpan, "seed should be TimeSpan"); - } - } [TestFixture] public class TimeSpanFixture2Async : TypeFixtureBase diff --git a/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs index da729786501..4b32c30ada2 100644 --- a/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs @@ -15,32 +15,6 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; - using System.Threading; - /// - /// Summary description for TimeSpanTypeFixture. - /// - [TestFixture] - public class TimeSpanTypeFixtureAsync - { - [Test] - public async Task NextAsync() - { - var type = (TimeSpanType) NHibernateUtil.TimeSpan; - object current = new TimeSpan(DateTime.Now.Ticks - 5); - object next = await (type.NextAsync(current, null, CancellationToken.None)); - - Assert.IsTrue(next is TimeSpan, "Next should be TimeSpan"); - Assert.IsTrue((TimeSpan) next > (TimeSpan) current, - "next should be greater than current (could be equal depending on how quickly this occurs)"); - } - - [Test] - public async Task SeedAsync() - { - var type = (TimeSpanType) NHibernateUtil.TimeSpan; - Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is TimeSpan, "seed should be TimeSpan"); - } - } [TestFixture] public class TimeSpanTypeFixture2Async : TypeFixtureBase diff --git a/src/NHibernate/Async/Engine/Versioning.cs b/src/NHibernate/Async/Engine/Versioning.cs deleted file mode 100644 index 061f598a9b8..00000000000 --- a/src/NHibernate/Async/Engine/Versioning.cs +++ /dev/null @@ -1,90 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by AsyncGenerator. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - - -using NHibernate.Persister.Entity; -using NHibernate.Type; - -namespace NHibernate.Engine -{ - using System.Threading.Tasks; - using System.Threading; - public partial class Versioning - { - - /// - /// Increment the given version number - /// - /// The value of the current version. - /// The of the versioned property. - /// The current . - /// A cancellation token that can be used to cancel the work - /// Returns the next value for the version. - public static async Task IncrementAsync(object version, IVersionType versionType, ISessionImplementor session, CancellationToken cancellationToken) - { - cancellationToken.ThrowIfCancellationRequested(); - object next = await (versionType.NextAsync(version, session, cancellationToken)).ConfigureAwait(false); - if (log.IsDebugEnabled()) - { - log.Debug("Incrementing: {0} to {1}", - versionType.ToLoggableString(version, session.Factory), - versionType.ToLoggableString(next, session.Factory)); - } - return next; - } - - /// - /// Create an initial version number - /// - /// The of the versioned property. - /// The current . - /// A cancellation token that can be used to cancel the work - /// A seed value to initialize the versioned property with. - public static async Task SeedAsync(IVersionType versionType, ISessionImplementor session, CancellationToken cancellationToken) - { - cancellationToken.ThrowIfCancellationRequested(); - object seed = await (versionType.SeedAsync(session, cancellationToken)).ConfigureAwait(false); - if (log.IsDebugEnabled()) - { - log.Debug("Seeding: {0}", seed); - } - return seed; - } - - /// - /// Seed the given instance state snapshot with an initial version number - /// - /// An array of objects that contains a snapshot of a persistent object. - /// The index of the version property in the fields parameter. - /// The of the versioned property. - /// Force the version to initialize - /// The current session, if any. - /// A cancellation token that can be used to cancel the work - /// if the version property needs to be seeded with an initial value. - public static async Task SeedVersionAsync(object[] fields, int versionProperty, IVersionType versionType, bool? force, - ISessionImplementor session, CancellationToken cancellationToken) - { - cancellationToken.ThrowIfCancellationRequested(); - object initialVersion = fields[versionProperty]; - if (initialVersion == null || !force.HasValue || force.Value) - { - fields[versionProperty] = await (SeedAsync(versionType, session, cancellationToken)).ConfigureAwait(false); - return true; - } - else - { - if (log.IsDebugEnabled()) - { - log.Debug("using initial version: {0}", initialVersion); - } - return false; - } - } - } -} diff --git a/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs b/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs index 0d7213cc0ad..501004fe18c 100644 --- a/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs +++ b/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs @@ -206,7 +206,7 @@ protected virtual async Task PerformSaveOrReplicateAsync(object entity, object[] values = persister.GetPropertyValuesToInsert(entity, GetMergeMap(anything), source); IType[] types = persister.PropertyTypes; - bool substitute = await (SubstituteValuesIfNecessaryAsync(entity, id, values, persister, source, cancellationToken)).ConfigureAwait(false); + bool substitute = SubstituteValuesIfNecessary(entity, id, values, persister, source); if (persister.HasCollections) { @@ -278,35 +278,6 @@ protected virtual async Task VisitCollectionsBeforeSaveAsync(object entity return visitor.SubstitutionRequired; } - /// - /// Perform any property value substitution that is necessary - /// (interceptor callback, version initialization...) - /// - /// The entity - /// The entity identifier - /// The snapshot entity state - /// The entity persister - /// The originating session - /// A cancellation token that can be used to cancel the work - /// - /// True if the snapshot state changed such that - /// reinjection of the values into the entity is required. - /// - protected virtual async Task SubstituteValuesIfNecessaryAsync(object entity, object id, object[] values, IEntityPersister persister, ISessionImplementor source, CancellationToken cancellationToken) - { - cancellationToken.ThrowIfCancellationRequested(); - bool substitute = source.Interceptor.OnSave(entity, id, values, persister.PropertyNames, persister.PropertyTypes); - - //keep the existing version number in the case of replicate! - if (persister.IsVersioned) - { - // NH Specific feature (H3.2 use null value for versionProperty; NH ask to persister to know if a valueType mean unversioned) - object versionValue = values[persister.VersionProperty]; - substitute |= await (Versioning.SeedVersionAsync(values, persister.VersionProperty, persister.VersionType, persister.IsUnsavedVersion(versionValue), source, cancellationToken)).ConfigureAwait(false); - } - return substitute; - } - /// Handles the calls needed to perform pre-save cascades for the given entity. /// The session from which the save event originated. /// The entity's persister instance. diff --git a/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs b/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs index d70bbb4b562..a4d0874e627 100644 --- a/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs +++ b/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs @@ -231,7 +231,7 @@ private async Task ScheduleUpdateAsync(FlushEntityEvent @event, Cancellati Validate(entity, persister, status); // increment the version number (if necessary) - object nextVersion = await (GetNextVersionAsync(@event, cancellationToken)).ConfigureAwait(false); + object nextVersion = GetNextVersion(@event); // if it was dirtied by a collection only int[] dirtyProperties = @event.DirtyProperties; @@ -296,41 +296,6 @@ protected virtual async Task HandleInterceptionAsync(FlushEntityEvent @eve return intercepted; } - private async Task GetNextVersionAsync(FlushEntityEvent @event, CancellationToken cancellationToken) - { - cancellationToken.ThrowIfCancellationRequested(); - // Convience method to retrieve an entities next version value - EntityEntry entry = @event.EntityEntry; - IEntityPersister persister = entry.Persister; - if (persister.IsVersioned) - { - object[] values = @event.PropertyValues; - - if (entry.IsBeingReplicated) - { - return Versioning.GetVersion(values, persister); - } - else - { - int[] dirtyProperties = @event.DirtyProperties; - - bool isVersionIncrementRequired = IsVersionIncrementRequired(@event, entry, persister, dirtyProperties); - - object nextVersion = isVersionIncrementRequired ? - await (Versioning.IncrementAsync(entry.Version, persister.VersionType, @event.Session, cancellationToken)).ConfigureAwait(false) : - entry.Version; //use the current version - - Versioning.SetVersion(values, nextVersion, persister); - - return nextVersion; - } - } - else - { - return null; - } - } - /// /// Performs all necessary checking to determine if an entity needs an SQL update /// to synchronize its state to the database. Modifies the event by side-effect! diff --git a/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs b/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs index 124f45d1755..00865e3f2b0 100644 --- a/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs +++ b/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs @@ -146,22 +146,6 @@ private async Task CascadeAfterReplicateAsync(object entity, IEntityPersister pe } } - protected override Task SubstituteValuesIfNecessaryAsync(object entity, object id, object[] values, IEntityPersister persister, ISessionImplementor source, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(SubstituteValuesIfNecessary(entity, id, values, persister, source)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - protected override async Task VisitCollectionsBeforeSaveAsync(object entity, object id, object[] values, Type.IType[] types, IEventSource source, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); diff --git a/src/NHibernate/Async/Impl/StatelessSessionImpl.cs b/src/NHibernate/Async/Impl/StatelessSessionImpl.cs index e2e53333e39..5327b490ce3 100644 --- a/src/NHibernate/Async/Impl/StatelessSessionImpl.cs +++ b/src/NHibernate/Async/Impl/StatelessSessionImpl.cs @@ -381,8 +381,8 @@ public async Task ManagedCloseAsync(CancellationToken cancellationToken) if (persister.IsVersioned) { object versionValue = state[persister.VersionProperty]; - bool substitute = await (Versioning.SeedVersionAsync(state, persister.VersionProperty, persister.VersionType, - persister.IsUnsavedVersion(versionValue), this, cancellationToken)).ConfigureAwait(false); + bool substitute = Versioning.SeedVersion(state, persister.VersionProperty, persister.VersionType, + persister.IsUnsavedVersion(versionValue), this); if (substitute) { persister.SetPropertyValues(entity, state); @@ -429,7 +429,7 @@ public async Task ManagedCloseAsync(CancellationToken cancellationToken) if (persister.IsVersioned) { oldVersion = persister.GetVersion(entity); - object newVersion = await (Versioning.IncrementAsync(oldVersion, persister.VersionType, this, cancellationToken)).ConfigureAwait(false); + object newVersion = Versioning.Increment(oldVersion, persister.VersionType, this); Versioning.SetVersion(state, newVersion, persister); persister.SetPropertyValues(entity, state); } diff --git a/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs b/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs index 56bdd82c0c4..422beb8174d 100644 --- a/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs +++ b/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs @@ -25,11 +25,21 @@ public partial class VersionTypeSeedParameterSpecification : IParameterSpecifica #region IParameterSpecification Members - public async Task BindAsync(DbCommand command, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) + public Task BindAsync(DbCommand command, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) { - cancellationToken.ThrowIfCancellationRequested(); - int position = sqlQueryParametersList.GetEffectiveParameterLocations(IdBackTrack).Single(); // version parameter can't appear more than once - await (type.NullSafeSetAsync(command, await (type.SeedAsync(session, cancellationToken)).ConfigureAwait(false), position, session, cancellationToken)).ConfigureAwait(false); + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + int position = sqlQueryParametersList.GetEffectiveParameterLocations(IdBackTrack).Single(); // version parameter can't appear more than once + return type.NullSafeSetAsync(command, type.Seed(session), position, session, cancellationToken); + } + catch (Exception ex) + { + return Task.FromException(ex); + } } public Task BindAsync(DbCommand command, IList multiSqlQueryParametersList, int singleSqlParametersOffset, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) diff --git a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs index 1e9ec77f2ba..ad3b8590044 100644 --- a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs @@ -203,7 +203,7 @@ public Task ForceVersionIncrementAsync(object id, object currentVersion, async Task InternalForceVersionIncrementAsync() { - object nextVersion = await (VersionType.NextAsync(currentVersion, session, cancellationToken)).ConfigureAwait(false); + object nextVersion = VersionType.Next(currentVersion, session); if (log.IsDebugEnabled()) { log.Debug("Forcing version increment [{0}; {1} -> {2}]", diff --git a/src/NHibernate/Async/Type/AbstractBinaryType.cs b/src/NHibernate/Async/Type/AbstractBinaryType.cs deleted file mode 100644 index ebe6d864485..00000000000 --- a/src/NHibernate/Async/Type/AbstractBinaryType.cs +++ /dev/null @@ -1,67 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data.Common; -using System.Text; -using NHibernate.Engine; -using NHibernate.SqlTypes; -using NHibernate.Util; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public abstract partial class AbstractBinaryType : MutableType, IVersionType, IComparer - { - - #region IVersionType Members - - // Note : simply returns null for seed() and next() as the only known - // application of binary types for versioning is for use with the - // TIMESTAMP datatype supported by Sybase and SQL Server, which - // are completely db-generated values... - - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/AbstractDateTimeType.cs b/src/NHibernate/Async/Type/AbstractDateTimeType.cs deleted file mode 100644 index 827ac034995..00000000000 --- a/src/NHibernate/Async/Type/AbstractDateTimeType.cs +++ /dev/null @@ -1,51 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data.Common; -using System.Globalization; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public abstract partial class AbstractDateTimeType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType - { - - #region IVersionType Members - - /// - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) => - SeedAsync(session, cancellationToken); - - /// - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/ByteType.cs b/src/NHibernate/Async/Type/ByteType.cs deleted file mode 100644 index 0d38fdf1a71..00000000000 --- a/src/NHibernate/Async/Type/ByteType.cs +++ /dev/null @@ -1,58 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data; -using System.Data.Common; -using System.Numerics; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class ByteType : PrimitiveType, IDiscriminatorType, IVersionType - { - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - } -} diff --git a/src/NHibernate/Async/Type/CustomType.cs b/src/NHibernate/Async/Type/CustomType.cs index ca1483b29fb..d14a79d560e 100644 --- a/src/NHibernate/Async/Type/CustomType.cs +++ b/src/NHibernate/Async/Type/CustomType.cs @@ -90,46 +90,6 @@ public override async Task IsDirtyAsync(object old, object current, bool[] return checkable[0] && await (IsDirtyAsync(old, current, session, cancellationToken)).ConfigureAwait(false); } - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (!(userType is IUserVersionType userVersionType)) - throw new InvalidOperationException( - $"User type {userType} does not implement {nameof(IUserVersionType)}, Either implement it, or " + - $"avoid using this user type as a version type."); - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (!(userType is IUserVersionType userVersionType)) - throw new InvalidOperationException( - $"User type {userType} does not implement {nameof(IUserVersionType)}, Either implement it, or " + - $"avoid using this user type as a version type."); - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - public override Task ReplaceAsync(object original, object current, ISessionImplementor session, object owner, IDictionary copiedAlready, CancellationToken cancellationToken) { diff --git a/src/NHibernate/Async/Type/DateTimeNoMsType.cs b/src/NHibernate/Async/Type/DateTimeNoMsType.cs deleted file mode 100644 index 6a8276e1b39..00000000000 --- a/src/NHibernate/Async/Type/DateTimeNoMsType.cs +++ /dev/null @@ -1,42 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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 NHibernate.Engine; -using System.Data; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class DateTimeNoMsType : AbstractDateTimeType - { - - #region IVersionType Members - - public override Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/DateTimeOffSetType.cs b/src/NHibernate/Async/Type/DateTimeOffSetType.cs deleted file mode 100644 index 2eedce9041f..00000000000 --- a/src/NHibernate/Async/Type/DateTimeOffSetType.cs +++ /dev/null @@ -1,52 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType - { - - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - return SeedAsync(session, cancellationToken); - } - - /// - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - } -} diff --git a/src/NHibernate/Async/Type/DbTimestampType.cs b/src/NHibernate/Async/Type/DbTimestampType.cs index cfa172aeca9..63a7f3db6a1 100644 --- a/src/NHibernate/Async/Type/DbTimestampType.cs +++ b/src/NHibernate/Async/Type/DbTimestampType.cs @@ -31,12 +31,12 @@ public override async Task SeedAsync(ISessionImplementor session, Cancel if (session == null) { log.Debug("incoming session was null; using current application host time"); - return await (base.SeedAsync(null, cancellationToken)).ConfigureAwait(false); + return base.Seed(null); } if (!SupportsCurrentTimestampSelection(session.Factory.Dialect)) { log.Info("falling back to application host based timestamp, as dialect does not support current timestamp selection"); - return await (base.SeedAsync(session, cancellationToken)).ConfigureAwait(false); + return base.Seed(session); } return await (GetCurrentTimestampAsync(session, cancellationToken)).ConfigureAwait(false); } diff --git a/src/NHibernate/Async/Type/EnumCharType.cs b/src/NHibernate/Async/Type/EnumCharType.cs deleted file mode 100644 index fe9eb513dbe..00000000000 --- a/src/NHibernate/Async/Type/EnumCharType.cs +++ /dev/null @@ -1,55 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class EnumCharType : AbstractEnumType - { - - public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Assemble(cached, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Disassemble(value, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - } -} diff --git a/src/NHibernate/Async/Type/EnumStringType.cs b/src/NHibernate/Async/Type/EnumStringType.cs deleted file mode 100644 index 3da2325af89..00000000000 --- a/src/NHibernate/Async/Type/EnumStringType.cs +++ /dev/null @@ -1,64 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Data; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public abstract partial class EnumStringType : AbstractEnumType - { - - /// - /// - /// - /// - /// - /// - /// A cancellation token that can be used to cancel the work - /// - public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Assemble(cached, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Disassemble(value, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - } -} diff --git a/src/NHibernate/Async/Type/IVersionType.cs b/src/NHibernate/Async/Type/IVersionType.cs deleted file mode 100644 index f4a17f28986..00000000000 --- a/src/NHibernate/Async/Type/IVersionType.cs +++ /dev/null @@ -1,37 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using NHibernate.Engine; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial interface IVersionType : IType - { - /// - /// When implemented by a class, increments the version. - /// - /// The current version - /// The current session, if available. - /// A cancellation token that can be used to cancel the work - /// an instance of the that has been incremented. - Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken); - - /// - /// When implemented by a class, gets an initial version. - /// - /// The current session, if available. - /// A cancellation token that can be used to cancel the work - /// An instance of the type. - Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken); - } -} diff --git a/src/NHibernate/Async/Type/Int16Type.cs b/src/NHibernate/Async/Type/Int16Type.cs deleted file mode 100644 index 804d767eafd..00000000000 --- a/src/NHibernate/Async/Type/Int16Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; -using System.Collections.Generic; -using System.Data; -using System.Numerics; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class Int16Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/Int32Type.cs b/src/NHibernate/Async/Type/Int32Type.cs deleted file mode 100644 index 3b4217968dd..00000000000 --- a/src/NHibernate/Async/Type/Int32Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; -using System.Collections.Generic; -using System.Data; -using System.Numerics; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class Int32Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/Int64Type.cs b/src/NHibernate/Async/Type/Int64Type.cs deleted file mode 100644 index e1b07967cbd..00000000000 --- a/src/NHibernate/Async/Type/Int64Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data; -using System.Data.Common; -using System.Numerics; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class Int64Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/PersistentEnumType.cs b/src/NHibernate/Async/Type/PersistentEnumType.cs deleted file mode 100644 index df295d96308..00000000000 --- a/src/NHibernate/Async/Type/PersistentEnumType.cs +++ /dev/null @@ -1,56 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections.Generic; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class PersistentEnumType : AbstractEnumType - { - - public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Assemble(cached, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Disassemble(value, session, owner)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - } -} diff --git a/src/NHibernate/Async/Type/TicksType.cs b/src/NHibernate/Async/Type/TicksType.cs deleted file mode 100644 index 0ffb06b37f6..00000000000 --- a/src/NHibernate/Async/Type/TicksType.cs +++ /dev/null @@ -1,44 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Data; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class TicksType : AbstractDateTimeType - { - - #region IVersionType Members - - public override Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs deleted file mode 100644 index 185baa88eba..00000000000 --- a/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs +++ /dev/null @@ -1,55 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; -using System.Collections.Generic; -using System.Data; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class TimeAsTimeSpanType : PrimitiveType, IVersionType - { - - #region IVersionType Members - - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - return SeedAsync(session, cancellationToken); - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/TimeSpanType.cs b/src/NHibernate/Async/Type/TimeSpanType.cs deleted file mode 100644 index 0917413671c..00000000000 --- a/src/NHibernate/Async/Type/TimeSpanType.cs +++ /dev/null @@ -1,56 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Data.Common; -using NHibernate.Engine; -using NHibernate.SqlTypes; -using System.Collections.Generic; -using System.Data; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class TimeSpanType : PrimitiveType, IVersionType, ILiteralType - { - - #region IVersionType Members - - public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - return SeedAsync(session, cancellationToken); - } - - /// - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/UInt16Type.cs b/src/NHibernate/Async/Type/UInt16Type.cs deleted file mode 100644 index cfd05ee60f6..00000000000 --- a/src/NHibernate/Async/Type/UInt16Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data; -using System.Data.Common; -using System.Numerics; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class UInt16Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/UInt32Type.cs b/src/NHibernate/Async/Type/UInt32Type.cs deleted file mode 100644 index 2fa37d01162..00000000000 --- a/src/NHibernate/Async/Type/UInt32Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data; -using System.Data.Common; -using System.Numerics; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class UInt32Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} diff --git a/src/NHibernate/Async/Type/UInt64Type.cs b/src/NHibernate/Async/Type/UInt64Type.cs deleted file mode 100644 index d2db5e47c99..00000000000 --- a/src/NHibernate/Async/Type/UInt64Type.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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.Collections; -using System.Collections.Generic; -using System.Data; -using System.Data.Common; -using System.Numerics; -using NHibernate.Engine; -using NHibernate.SqlTypes; - -namespace NHibernate.Type -{ - using System.Threading.Tasks; - using System.Threading; - public partial class UInt64Type : PrimitiveType, IDiscriminatorType, IVersionType - { - - #region IVersionType Members - - public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Next(current, session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) - { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - return Task.FromResult(Seed(session)); - } - catch (Exception ex) - { - return Task.FromException(ex); - } - } - - #endregion - } -} From 3df8272ce78f5630e55dbceb611cc6edb8e521b8 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:23:23 +1000 Subject: [PATCH 05/14] Code style --- src/NHibernate/Type/AbstractCharType.cs | 10 ++------- src/NHibernate/Type/BooleanType.cs | 21 ++----------------- src/NHibernate/Type/DateTimeOffSetType.cs | 20 ++++-------------- src/NHibernate/Type/DecimalType.cs | 15 +++----------- src/NHibernate/Type/DoubleType.cs | 15 +++----------- src/NHibernate/Type/GuidType.cs | 15 +++----------- src/NHibernate/Type/Int16Type.cs | 25 +++++------------------ src/NHibernate/Type/Int32Type.cs | 20 ++++-------------- src/NHibernate/Type/Int64Type.cs | 20 ++++-------------- src/NHibernate/Type/SByteType.cs | 24 ++++------------------ src/NHibernate/Type/SingleType.cs | 15 +++----------- src/NHibernate/Type/TimeAsTimeSpanType.cs | 20 ++++-------------- src/NHibernate/Type/TimeSpanType.cs | 20 ++++-------------- src/NHibernate/Type/TimeType.cs | 15 +++----------- src/NHibernate/Type/UInt16Type.cs | 20 ++++-------------- src/NHibernate/Type/UInt32Type.cs | 20 ++++-------------- src/NHibernate/Type/UInt64Type.cs | 20 ++++-------------- 17 files changed, 60 insertions(+), 255 deletions(-) diff --git a/src/NHibernate/Type/AbstractCharType.cs b/src/NHibernate/Type/AbstractCharType.cs index d8b7c0d6a3d..1a10dbe25e7 100644 --- a/src/NHibernate/Type/AbstractCharType.cs +++ b/src/NHibernate/Type/AbstractCharType.cs @@ -24,15 +24,9 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi return '\0'; // This line should never be executed } - public override System.Type PrimitiveClass - { - get { return typeof(char); } - } + public override System.Type PrimitiveClass => typeof(char); - public override System.Type ReturnedClass - { - get { return typeof(char); } - } + public override System.Type ReturnedClass => typeof(char); public override void Set(DbCommand cmd, object value, int index, ISessionImplementor session) { diff --git a/src/NHibernate/Type/BooleanType.cs b/src/NHibernate/Type/BooleanType.cs index d93e23e0385..42570e9f25b 100644 --- a/src/NHibernate/Type/BooleanType.cs +++ b/src/NHibernate/Type/BooleanType.cs @@ -12,29 +12,12 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class BooleanType : PrimitiveType, IDiscriminatorType + public class BooleanType(AnsiStringFixedLengthSqlType sqlType) : PrimitiveType(sqlType), IDiscriminatorType { protected static readonly object TrueObject = true; protected static readonly object FalseObject = false; - /// - /// Initialize a new instance of the BooleanType - /// - /// This is used when the Property is mapped to a native boolean type. - public BooleanType() : base(SqlTypeFactory.Boolean) - { - } - - /// - /// Initialize a new instance of the BooleanType class using a - /// . - /// - /// The underlying . - /// - /// This is used when the Property is mapped to a string column - /// that stores true or false as a string. - /// - public BooleanType(AnsiStringFixedLengthSqlType sqlType) : base(sqlType) + public BooleanType() : this((AnsiStringFixedLengthSqlType) SqlTypeFactory.Boolean) { } diff --git a/src/NHibernate/Type/DateTimeOffSetType.cs b/src/NHibernate/Type/DateTimeOffSetType.cs index 2ccc5bbe71b..b8408916d61 100644 --- a/src/NHibernate/Type/DateTimeOffSetType.cs +++ b/src/NHibernate/Type/DateTimeOffSetType.cs @@ -21,27 +21,15 @@ public DateTimeOffsetType() : this((DateTimeOffsetSqlType) SqlTypeFactory.DateTi { } - public override string Name - { - get { return "DateTimeOffset"; } - } + public override string Name => "DateTimeOffset"; - public override System.Type ReturnedClass - { - get { return typeof (DateTimeOffset); } - } + public override System.Type ReturnedClass => typeof (DateTimeOffset); - public override System.Type PrimitiveClass - { - get { return typeof (DateTimeOffset); } - } + public override System.Type PrimitiveClass => typeof (DateTimeOffset); public override object DefaultValue => BaseDateValue; - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { diff --git a/src/NHibernate/Type/DecimalType.cs b/src/NHibernate/Type/DecimalType.cs index 67e22861cbd..973ecce0844 100644 --- a/src/NHibernate/Type/DecimalType.cs +++ b/src/NHibernate/Type/DecimalType.cs @@ -26,25 +26,16 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi return Convert.ToDecimal(rs[index]); } - public override System.Type ReturnedClass - { - get { return typeof(Decimal); } - } + public override System.Type ReturnedClass => typeof(Decimal); public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { st.Parameters[index].Value = Convert.ToDecimal(value); } - public override string Name - { - get { return "Decimal"; } - } + public override string Name => "Decimal"; - public override System.Type PrimitiveClass - { - get { return typeof (Decimal); } - } + public override System.Type PrimitiveClass => typeof (Decimal); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/DoubleType.cs b/src/NHibernate/Type/DoubleType.cs index 1cf8450fffc..a00ea6030ba 100644 --- a/src/NHibernate/Type/DoubleType.cs +++ b/src/NHibernate/Type/DoubleType.cs @@ -31,10 +31,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } /// - public override System.Type ReturnedClass - { - get { return typeof(double); } - } + public override System.Type ReturnedClass => typeof(double); public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { @@ -42,10 +39,7 @@ public override void Set(DbCommand st, object value, int index, ISessionImplemen } /// - public override string Name - { - get { return "Double"; } - } + public override string Name => "Double"; // Since 5.2 [Obsolete("This method has no more usages and will be removed in a future version.")] @@ -54,10 +48,7 @@ public override object FromStringValue(string xml) return double.Parse(xml); } - public override System.Type PrimitiveClass - { - get { return typeof(double); } - } + public override System.Type PrimitiveClass => typeof(double); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/GuidType.cs b/src/NHibernate/Type/GuidType.cs index f957c886b14..9d3ffb07207 100644 --- a/src/NHibernate/Type/GuidType.cs +++ b/src/NHibernate/Type/GuidType.cs @@ -31,10 +31,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } /// - public override System.Type ReturnedClass - { - get { return typeof(Guid); } - } + public override System.Type ReturnedClass => typeof(Guid); public override void Set(DbCommand cmd, object value, int index, ISessionImplementor session) { @@ -44,10 +41,7 @@ public override void Set(DbCommand cmd, object value, int index, ISessionImpleme } /// - public override string Name - { - get { return "Guid"; } - } + public override string Name => "Guid"; // Since 5.2 [Obsolete("This method has no more usages and will be removed in a future version.")] @@ -68,10 +62,7 @@ public object StringToObject(string xml) #pragma warning restore 618 } - public override System.Type PrimitiveClass - { - get { return typeof(Guid); } - } + public override System.Type PrimitiveClass => typeof(Guid); public override object DefaultValue => EmptyObject; diff --git a/src/NHibernate/Type/Int16Type.cs b/src/NHibernate/Type/Int16Type.cs index ae304517710..07ca82c81dd 100644 --- a/src/NHibernate/Type/Int16Type.cs +++ b/src/NHibernate/Type/Int16Type.cs @@ -19,10 +19,7 @@ public partial class Int16Type() : PrimitiveType(SqlTypeFactory.Int16), IDiscrim private static readonly object ZeroObject = (short) 0; /// - public override string Name - { - get { return "Int16"; } - } + public override string Name => "Int16"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(Int16); } - } + public override System.Type ReturnedClass => typeof(Int16); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -84,22 +78,13 @@ public virtual object Seed(ISessionImplementor session) return (Int16)1; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof (Int16); } - } + public override System.Type PrimitiveClass => typeof (Int16); - public override object DefaultValue - { - get { return ZeroObject; } - } + public override object DefaultValue => ZeroObject; public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { diff --git a/src/NHibernate/Type/Int32Type.cs b/src/NHibernate/Type/Int32Type.cs index 9e363a1f9ce..54cdc99d210 100644 --- a/src/NHibernate/Type/Int32Type.cs +++ b/src/NHibernate/Type/Int32Type.cs @@ -19,10 +19,7 @@ public partial class Int32Type() : PrimitiveType(SqlTypeFactory.Int32), IDiscrim private static readonly object ZeroObject = 0; /// - public override string Name - { - get { return "Int32"; } - } + public override string Name => "Int32"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(Int32); } - } + public override System.Type ReturnedClass => typeof(Int32); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -84,17 +78,11 @@ public virtual object Seed(ISessionImplementor session) return 1; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof(Int32); } - } + public override System.Type PrimitiveClass => typeof(Int32); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/Int64Type.cs b/src/NHibernate/Type/Int64Type.cs index 2bb559346c3..cae3baf07e8 100644 --- a/src/NHibernate/Type/Int64Type.cs +++ b/src/NHibernate/Type/Int64Type.cs @@ -19,10 +19,7 @@ public partial class Int64Type() : PrimitiveType(SqlTypeFactory.Int64), IDiscrim private static readonly object ZeroObject = (Int64) 0; /// - public override string Name - { - get { return "Int64"; } - } + public override string Name => "Int64"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(Int64); } - } + public override System.Type ReturnedClass => typeof(Int64); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -84,17 +78,11 @@ public virtual object Seed(ISessionImplementor session) return 1L; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof(Int64); } - } + public override System.Type PrimitiveClass => typeof(Int64); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/SByteType.cs b/src/NHibernate/Type/SByteType.cs index 7e6486dba89..fced063708f 100644 --- a/src/NHibernate/Type/SByteType.cs +++ b/src/NHibernate/Type/SByteType.cs @@ -19,10 +19,7 @@ public class SByteType() : PrimitiveType(SqlTypeFactory.SByte), IDiscriminatorTy private static readonly object ZeroObject = (sbyte) 0; /// - public override string Name - { - get { return "SByte"; } - } + public override string Name => "SByte"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(SByte); } - } + public override System.Type ReturnedClass => typeof(SByte); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -68,8 +62,6 @@ public override object FromStringValue(string xml) return SByte.Parse(xml); } - #region IVersionType Members - // Since 5.2 [Obsolete("This member has no more usage and will be removed in a future version.")] public virtual object Next(object current, ISessionImplementor session) @@ -86,17 +78,9 @@ public virtual object Seed(ISessionImplementor session) // Since 5.2 [Obsolete("This member has no more usage and will be removed in a future version.")] - public IComparer Comparator - { - get { return Comparer.Default; } - } - - #endregion + public IComparer Comparator => Comparer.Default; - public override System.Type PrimitiveClass - { - get { return typeof(SByte); } - } + public override System.Type PrimitiveClass => typeof(SByte); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/SingleType.cs b/src/NHibernate/Type/SingleType.cs index 509ed6834dd..ef83ab15423 100644 --- a/src/NHibernate/Type/SingleType.cs +++ b/src/NHibernate/Type/SingleType.cs @@ -25,10 +25,7 @@ public SingleType() : this(SqlTypeFactory.Single) } /// - public override string Name - { - get { return "Single"; } - } + public override string Name => "Single"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -46,10 +43,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(Single); } - } + public override System.Type ReturnedClass => typeof(Single); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -70,10 +64,7 @@ public override object FromStringValue(string xml) return Single.Parse(xml); } - public override System.Type PrimitiveClass - { - get { return typeof(Single); } - } + public override System.Type PrimitiveClass => typeof(Single); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Type/TimeAsTimeSpanType.cs index 2115e64f06b..315f6615c7c 100644 --- a/src/NHibernate/Type/TimeAsTimeSpanType.cs +++ b/src/NHibernate/Type/TimeAsTimeSpanType.cs @@ -24,10 +24,7 @@ public TimeAsTimeSpanType() : this((TimeSqlType) SqlTypeFactory.Time) { } - public override string Name - { - get { return "TimeAsTimeSpan"; } - } + public override string Name => "TimeAsTimeSpan"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -56,10 +53,7 @@ public override void Set(DbCommand st, object value, int index, ISessionImplemen st.Parameters[index].Value = BaseDateValue.AddTicks(((TimeSpan)value).Ticks); } - public override System.Type ReturnedClass - { - get { return typeof(TimeSpan); } - } + public override System.Type ReturnedClass => typeof(TimeSpan); /// public override string ToLoggableString(object value, ISessionFactoryImplementor factory) @@ -97,10 +91,7 @@ public object StringToObject(string xml) return TimeSpan.Parse(xml); } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion @@ -115,10 +106,7 @@ public override object FromStringValue(string xml) return TimeSpan.Parse(xml); } - public override System.Type PrimitiveClass - { - get { return typeof(TimeSpan); } - } + public override System.Type PrimitiveClass => typeof(TimeSpan); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/TimeSpanType.cs b/src/NHibernate/Type/TimeSpanType.cs index 5f2acd5d1d4..cd189c753cb 100644 --- a/src/NHibernate/Type/TimeSpanType.cs +++ b/src/NHibernate/Type/TimeSpanType.cs @@ -17,10 +17,7 @@ public partial class TimeSpanType() : PrimitiveType(SqlTypeFactory.Int64), IVers private static readonly object ZeroObject = TimeSpan.Zero; /// - public override string Name - { - get { return "TimeSpan"; } - } + public override string Name => "TimeSpan"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -35,10 +32,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } /// - public override System.Type ReturnedClass - { - get { return typeof(TimeSpan); } - } + public override System.Type ReturnedClass => typeof(TimeSpan); public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { @@ -82,10 +76,7 @@ public object StringToObject(string xml) return TimeSpan.Parse(xml); } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion @@ -100,10 +91,7 @@ public override object FromStringValue(string xml) return TimeSpan.Parse(xml); } - public override System.Type PrimitiveClass - { - get { return typeof(TimeSpan); } - } + public override System.Type PrimitiveClass => typeof(TimeSpan); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/TimeType.cs b/src/NHibernate/Type/TimeType.cs index cd66cc0200b..e7fc217bdd1 100644 --- a/src/NHibernate/Type/TimeType.cs +++ b/src/NHibernate/Type/TimeType.cs @@ -43,10 +43,7 @@ public TimeType(TimeSqlType sqlType) : base(sqlType) { } - public override string Name - { - get { return "Time"; } - } + public override string Name => "Time"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -66,10 +63,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(DateTime); } - } + public override System.Type ReturnedClass => typeof(DateTime); public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { @@ -155,10 +149,7 @@ public override object FromStringValue(string xml) return DateTime.Parse(xml); } - public override System.Type PrimitiveClass - { - get { return typeof(DateTime); } - } + public override System.Type PrimitiveClass => typeof(DateTime); public override object DefaultValue => BaseDateValue; diff --git a/src/NHibernate/Type/UInt16Type.cs b/src/NHibernate/Type/UInt16Type.cs index b8b1201aa95..5d2797eb3c2 100644 --- a/src/NHibernate/Type/UInt16Type.cs +++ b/src/NHibernate/Type/UInt16Type.cs @@ -19,10 +19,7 @@ public partial class UInt16Type() : PrimitiveType(SqlTypeFactory.UInt16), IDiscr private static readonly object ZeroObject = (ushort) 0; /// - public override string Name - { - get { return "UInt16"; } - } + public override string Name => "UInt16"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(UInt16); } - } + public override System.Type ReturnedClass => typeof(UInt16); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -84,17 +78,11 @@ public virtual object Seed(ISessionImplementor session) return 1; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof(UInt16); } - } + public override System.Type PrimitiveClass => typeof(UInt16); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/UInt32Type.cs b/src/NHibernate/Type/UInt32Type.cs index 5adca799dab..e0f1c282cd5 100644 --- a/src/NHibernate/Type/UInt32Type.cs +++ b/src/NHibernate/Type/UInt32Type.cs @@ -19,10 +19,7 @@ public partial class UInt32Type() : PrimitiveType(SqlTypeFactory.UInt32), IDiscr private static readonly object ZeroObject = (UInt32) 0; /// - public override string Name - { - get { return "UInt32"; } - } + public override string Name => "UInt32"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -40,10 +37,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(UInt32); } - } + public override System.Type ReturnedClass => typeof(UInt32); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -84,17 +78,11 @@ public virtual object Seed(ISessionImplementor session) return 1; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof(UInt32); } - } + public override System.Type PrimitiveClass => typeof(UInt32); public override object DefaultValue => ZeroObject; diff --git a/src/NHibernate/Type/UInt64Type.cs b/src/NHibernate/Type/UInt64Type.cs index 7085a8a8a74..b31d6fe7c30 100644 --- a/src/NHibernate/Type/UInt64Type.cs +++ b/src/NHibernate/Type/UInt64Type.cs @@ -18,10 +18,7 @@ public partial class UInt64Type() : PrimitiveType(SqlTypeFactory.UInt64), IDiscr { private static readonly object ZeroObject = (UInt64) 0; - public override string Name - { - get { return "UInt64"; } - } + public override string Name => "UInt64"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -39,10 +36,7 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass - { - get { return typeof(UInt64); } - } + public override System.Type ReturnedClass => typeof(UInt64); public override void Set(DbCommand rs, object value, int index, ISessionImplementor session) { @@ -83,17 +77,11 @@ public virtual object Seed(ISessionImplementor session) return 1; } - public IComparer Comparator - { - get { return Comparer.Default; } - } + public IComparer Comparator => Comparer.Default; #endregion - public override System.Type PrimitiveClass - { - get { return typeof(UInt64); } - } + public override System.Type PrimitiveClass => typeof(UInt64); public override object DefaultValue => ZeroObject; From 0cc1ff3e77c8d82ff0d728767ff7624dbf8ac010 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:41:41 +1000 Subject: [PATCH 06/14] Revert primary constructor change --- src/NHibernate/Type/AbstractCharType.cs | 7 ++++++- src/NHibernate/Type/AbstractDateTimeType.cs | 7 ++++++- src/NHibernate/Type/BooleanType.cs | 7 ++++++- src/NHibernate/Type/ByteType.cs | 7 ++++++- src/NHibernate/Type/DateTimeOffSetType.cs | 8 ++++++-- src/NHibernate/Type/DateType.cs | 7 ++++++- src/NHibernate/Type/DecimalType.cs | 7 ++++++- src/NHibernate/Type/DoubleType.cs | 7 ++++++- src/NHibernate/Type/Int32Type.cs | 7 ++++++- src/NHibernate/Type/Int64Type.cs | 7 ++++++- src/NHibernate/Type/PrimitiveType.cs | 7 ++++++- src/NHibernate/Type/SByteType.cs | 7 ++++++- src/NHibernate/Type/SingleType.cs | 7 ++++++- src/NHibernate/Type/TimeAsTimeSpanType.cs | 7 ++++++- src/NHibernate/Type/TimeSpanType.cs | 6 +++++- src/NHibernate/Type/UInt16Type.cs | 7 ++++++- src/NHibernate/Type/UInt32Type.cs | 7 ++++++- src/NHibernate/Type/UInt64Type.cs | 7 ++++++- 18 files changed, 107 insertions(+), 19 deletions(-) diff --git a/src/NHibernate/Type/AbstractCharType.cs b/src/NHibernate/Type/AbstractCharType.cs index 1a10dbe25e7..896c33c8774 100644 --- a/src/NHibernate/Type/AbstractCharType.cs +++ b/src/NHibernate/Type/AbstractCharType.cs @@ -9,8 +9,13 @@ namespace NHibernate.Type /// Common base class for and . /// [Serializable] - public abstract class AbstractCharType(SqlType sqlType) : PrimitiveType(sqlType), IDiscriminatorType + public abstract class AbstractCharType : PrimitiveType, IDiscriminatorType { + /// + protected AbstractCharType(SqlType sqlType) : base(sqlType) + { + } + public override object DefaultValue => throw new NotSupportedException("not a valid id type"); public override object Get(DbDataReader rs, int index, ISessionImplementor session) diff --git a/src/NHibernate/Type/AbstractDateTimeType.cs b/src/NHibernate/Type/AbstractDateTimeType.cs index b3009c69f13..9deb2273d3e 100644 --- a/src/NHibernate/Type/AbstractDateTimeType.cs +++ b/src/NHibernate/Type/AbstractDateTimeType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type /// Base class for date time types. /// [Serializable] - public abstract partial class AbstractDateTimeType(SqlType sqlTypeDateTime) : PrimitiveType(sqlTypeDateTime), IIdentifierType, ILiteralType, IVersionType + public abstract partial class AbstractDateTimeType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType { private static readonly object BaseDateValue = DateTime.MinValue; @@ -36,6 +36,11 @@ protected AbstractDateTimeType() : this(SqlTypeFactory.DateTime) { } + /// + protected AbstractDateTimeType(SqlType sqlTypeDateTime) : base(sqlTypeDateTime) + { + } + /// /// Adjust the date time value for this type from an arbitrary date time value. /// diff --git a/src/NHibernate/Type/BooleanType.cs b/src/NHibernate/Type/BooleanType.cs index 42570e9f25b..de78b574ae9 100644 --- a/src/NHibernate/Type/BooleanType.cs +++ b/src/NHibernate/Type/BooleanType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class BooleanType(AnsiStringFixedLengthSqlType sqlType) : PrimitiveType(sqlType), IDiscriminatorType + public class BooleanType : PrimitiveType, IDiscriminatorType { protected static readonly object TrueObject = true; protected static readonly object FalseObject = false; @@ -21,6 +21,11 @@ public BooleanType() : this((AnsiStringFixedLengthSqlType) SqlTypeFactory.Boolea { } + /// + public BooleanType(AnsiStringFixedLengthSqlType sqlType) : base(sqlType) + { + } + public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return GetBooleanAsObject(Convert.ToBoolean(rs[index])); diff --git a/src/NHibernate/Type/ByteType.cs b/src/NHibernate/Type/ByteType.cs index 16d03bb3db9..f52071890ff 100644 --- a/src/NHibernate/Type/ByteType.cs +++ b/src/NHibernate/Type/ByteType.cs @@ -13,10 +13,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class ByteType() : PrimitiveType(SqlTypeFactory.Byte), IDiscriminatorType, IVersionType + public partial class ByteType : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (byte) 0; + /// + public ByteType() : base(SqlTypeFactory.Byte) + { + } + public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return rs[index] switch diff --git a/src/NHibernate/Type/DateTimeOffSetType.cs b/src/NHibernate/Type/DateTimeOffSetType.cs index b8408916d61..e9c4f45bd85 100644 --- a/src/NHibernate/Type/DateTimeOffSetType.cs +++ b/src/NHibernate/Type/DateTimeOffSetType.cs @@ -12,8 +12,7 @@ namespace NHibernate.Type /// Maps a Property to a /// [Serializable] - public partial class DateTimeOffsetType(DateTimeOffsetSqlType sqlType) - : PrimitiveType(sqlType), IIdentifierType, ILiteralType, IVersionType + public partial class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType { private static readonly object BaseDateValue = DateTimeOffset.MinValue; @@ -21,6 +20,11 @@ public DateTimeOffsetType() : this((DateTimeOffsetSqlType) SqlTypeFactory.DateTi { } + /// + public DateTimeOffsetType(DateTimeOffsetSqlType sqlType) : base(sqlType) + { + } + public override string Name => "DateTimeOffset"; public override System.Type ReturnedClass => typeof (DateTimeOffset); diff --git a/src/NHibernate/Type/DateType.cs b/src/NHibernate/Type/DateType.cs index 1bea11def0a..7bf772c9e95 100644 --- a/src/NHibernate/Type/DateType.cs +++ b/src/NHibernate/Type/DateType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type /// column /// [Serializable] - public class DateType() : AbstractDateTimeType(SqlTypeFactory.Date), IParameterizedType + public class DateType : AbstractDateTimeType, IParameterizedType { private static readonly INHibernateLogger _log = NHibernateLogger.For(typeof(DateType)); // Since v5.0 @@ -26,6 +26,11 @@ public class DateType() : AbstractDateTimeType(SqlTypeFactory.Date), IParameteri private object customBaseDate = _baseDateValue; + /// + public DateType() : base(SqlTypeFactory.Date) + { + } + /// public override string Name => "Date"; diff --git a/src/NHibernate/Type/DecimalType.cs b/src/NHibernate/Type/DecimalType.cs index 973ecce0844..e2398ec4ce6 100644 --- a/src/NHibernate/Type/DecimalType.cs +++ b/src/NHibernate/Type/DecimalType.cs @@ -11,7 +11,7 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class DecimalType(SqlType sqlType) : PrimitiveType(sqlType), IIdentifierType + public class DecimalType : PrimitiveType, IIdentifierType { private static readonly object ZeroObject = 0m; @@ -21,6 +21,11 @@ public DecimalType() { } + /// + public DecimalType(SqlType sqlType) : base(sqlType) + { + } + public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return Convert.ToDecimal(rs[index]); diff --git a/src/NHibernate/Type/DoubleType.cs b/src/NHibernate/Type/DoubleType.cs index a00ea6030ba..796ca35e611 100644 --- a/src/NHibernate/Type/DoubleType.cs +++ b/src/NHibernate/Type/DoubleType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class DoubleType(SqlType sqlType) : PrimitiveType(sqlType) + public class DoubleType : PrimitiveType { private static readonly object ZeroObject = 0D; @@ -21,6 +21,11 @@ public DoubleType() : this(SqlTypeFactory.Double) { } + /// + public DoubleType(SqlType sqlType) : base(sqlType) + { + } + public override object Get(DbDataReader rs, int index, ISessionImplementor session) { return rs[index] switch diff --git a/src/NHibernate/Type/Int32Type.cs b/src/NHibernate/Type/Int32Type.cs index 54cdc99d210..f19fb1148fd 100644 --- a/src/NHibernate/Type/Int32Type.cs +++ b/src/NHibernate/Type/Int32Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int32Type() : PrimitiveType(SqlTypeFactory.Int32), IDiscriminatorType, IVersionType + public partial class Int32Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = 0; + /// + public Int32Type() : base(SqlTypeFactory.Int32) + { + } + /// public override string Name => "Int32"; diff --git a/src/NHibernate/Type/Int64Type.cs b/src/NHibernate/Type/Int64Type.cs index cae3baf07e8..45eb37b8366 100644 --- a/src/NHibernate/Type/Int64Type.cs +++ b/src/NHibernate/Type/Int64Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int64Type() : PrimitiveType(SqlTypeFactory.Int64), IDiscriminatorType, IVersionType + public partial class Int64Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (Int64) 0; + /// + public Int64Type() : base(SqlTypeFactory.Int64) + { + } + /// public override string Name => "Int64"; diff --git a/src/NHibernate/Type/PrimitiveType.cs b/src/NHibernate/Type/PrimitiveType.cs index 834bbd9d812..2956f394eb5 100644 --- a/src/NHibernate/Type/PrimitiveType.cs +++ b/src/NHibernate/Type/PrimitiveType.cs @@ -8,8 +8,13 @@ namespace NHibernate.Type /// Superclass of types. /// [Serializable] - public abstract class PrimitiveType(SqlType sqlType) : ImmutableType(sqlType), ILiteralType + public abstract class PrimitiveType : ImmutableType, ILiteralType { + /// + protected PrimitiveType(SqlType sqlType) : base(sqlType) + { + } + public abstract System.Type PrimitiveClass { get; } public abstract object DefaultValue { get; } diff --git a/src/NHibernate/Type/SByteType.cs b/src/NHibernate/Type/SByteType.cs index fced063708f..513cacb6e70 100644 --- a/src/NHibernate/Type/SByteType.cs +++ b/src/NHibernate/Type/SByteType.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class SByteType() : PrimitiveType(SqlTypeFactory.SByte), IDiscriminatorType + public class SByteType : PrimitiveType, IDiscriminatorType { private static readonly object ZeroObject = (sbyte) 0; + /// + public SByteType() : base(SqlTypeFactory.SByte) + { + } + /// public override string Name => "SByte"; diff --git a/src/NHibernate/Type/SingleType.cs b/src/NHibernate/Type/SingleType.cs index ef83ab15423..3bc568d0ac3 100644 --- a/src/NHibernate/Type/SingleType.cs +++ b/src/NHibernate/Type/SingleType.cs @@ -16,7 +16,7 @@ namespace NHibernate.Type /// matches up with the capabilities of /// [Serializable] - public class SingleType(SqlType sqlType) : PrimitiveType(sqlType) + public class SingleType : PrimitiveType { private static readonly object ZeroObject = (float) 0; @@ -24,6 +24,11 @@ public SingleType() : this(SqlTypeFactory.Single) { } + /// + public SingleType(SqlType sqlType) : base(sqlType) + { + } + /// public override string Name => "Single"; diff --git a/src/NHibernate/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Type/TimeAsTimeSpanType.cs index 315f6615c7c..860e90cb254 100644 --- a/src/NHibernate/Type/TimeAsTimeSpanType.cs +++ b/src/NHibernate/Type/TimeAsTimeSpanType.cs @@ -14,7 +14,7 @@ namespace NHibernate.Type /// but mapping against a . /// [Serializable] - public partial class TimeAsTimeSpanType(TimeSqlType sqlType) : PrimitiveType(sqlType), IVersionType + public partial class TimeAsTimeSpanType : PrimitiveType, IVersionType { private static readonly object ZeroObject = TimeSpan.Zero; private static readonly DateTime BaseDateValue = new DateTime(1753, 01, 01); @@ -24,6 +24,11 @@ public TimeAsTimeSpanType() : this((TimeSqlType) SqlTypeFactory.Time) { } + /// + public TimeAsTimeSpanType(TimeSqlType sqlType) : base(sqlType) + { + } + public override string Name => "TimeAsTimeSpan"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) diff --git a/src/NHibernate/Type/TimeSpanType.cs b/src/NHibernate/Type/TimeSpanType.cs index cd189c753cb..ed37b4629d2 100644 --- a/src/NHibernate/Type/TimeSpanType.cs +++ b/src/NHibernate/Type/TimeSpanType.cs @@ -12,10 +12,14 @@ namespace NHibernate.Type /// Maps a Property to an column /// [Serializable] - public partial class TimeSpanType() : PrimitiveType(SqlTypeFactory.Int64), IVersionType, ILiteralType + public partial class TimeSpanType : PrimitiveType, IVersionType, ILiteralType { private static readonly object ZeroObject = TimeSpan.Zero; + public TimeSpanType() : base(SqlTypeFactory.Int64) + { + } + /// public override string Name => "TimeSpan"; diff --git a/src/NHibernate/Type/UInt16Type.cs b/src/NHibernate/Type/UInt16Type.cs index 5d2797eb3c2..c37bbfaca75 100644 --- a/src/NHibernate/Type/UInt16Type.cs +++ b/src/NHibernate/Type/UInt16Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt16Type() : PrimitiveType(SqlTypeFactory.UInt16), IDiscriminatorType, IVersionType + public partial class UInt16Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (ushort) 0; + /// + public UInt16Type() : base(SqlTypeFactory.UInt16) + { + } + /// public override string Name => "UInt16"; diff --git a/src/NHibernate/Type/UInt32Type.cs b/src/NHibernate/Type/UInt32Type.cs index e0f1c282cd5..97654cc032b 100644 --- a/src/NHibernate/Type/UInt32Type.cs +++ b/src/NHibernate/Type/UInt32Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt32Type() : PrimitiveType(SqlTypeFactory.UInt32), IDiscriminatorType, IVersionType + public partial class UInt32Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (UInt32) 0; + /// + public UInt32Type() : base(SqlTypeFactory.UInt32) + { + } + /// public override string Name => "UInt32"; diff --git a/src/NHibernate/Type/UInt64Type.cs b/src/NHibernate/Type/UInt64Type.cs index b31d6fe7c30..2558ebbd117 100644 --- a/src/NHibernate/Type/UInt64Type.cs +++ b/src/NHibernate/Type/UInt64Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class UInt64Type() : PrimitiveType(SqlTypeFactory.UInt64), IDiscriminatorType, IVersionType + public partial class UInt64Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (UInt64) 0; + /// + public UInt64Type() : base(SqlTypeFactory.UInt64) + { + } + public override string Name => "UInt64"; public override object Get(DbDataReader rs, int index, ISessionImplementor session) From 845182b0d9e1fa38c5855454f091c15fbfb0854a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 23 May 2024 02:43:40 +0000 Subject: [PATCH 07/14] Generate async files --- .../Async/Linq/ByMethod/MappedAsTests.cs | 52 +++++ src/NHibernate.Test/Async/Linq/WhereTests.cs | 18 ++ .../Dates/DateTimeOffsetFixture.cs | 18 ++ .../NH3961/DateParametersComparedTo.cs | 195 ++++++++++++++++++ .../TypesTest/AbstractDateTimeTypeFixture.cs | 28 +++ .../TypesTest/DateTimeOffsetTypeFixture.cs | 17 ++ .../Async/TypesTest/Int32TypeFixture.cs | 43 ++++ .../Async/TypesTest/Int64TypeFixture.cs | 61 ++++++ .../TypesTest/TimeAsTimeSpanTypeFixture.cs | 26 +++ .../Async/TypesTest/TimeSpanTypeFixture.cs | 26 +++ src/NHibernate/Async/Engine/Versioning.cs | 90 ++++++++ .../Default/AbstractSaveEventListener.cs | 31 ++- .../DefaultFlushEntityEventListener.cs | 37 +++- .../Default/DefaultReplicateEventListener.cs | 16 ++ .../Async/Impl/StatelessSessionImpl.cs | 6 +- .../VersionTypeSeedParameterSpecification.cs | 18 +- .../Entity/AbstractEntityPersister.cs | 2 +- .../Async/Type/AbstractBinaryType.cs | 67 ++++++ .../Async/Type/AbstractDateTimeType.cs | 51 +++++ src/NHibernate/Async/Type/ByteType.cs | 58 ++++++ src/NHibernate/Async/Type/CustomType.cs | 40 ++++ src/NHibernate/Async/Type/DateTimeNoMsType.cs | 42 ++++ .../Async/Type/DateTimeOffSetType.cs | 52 +++++ src/NHibernate/Async/Type/DbTimestampType.cs | 4 +- src/NHibernate/Async/Type/EnumCharType.cs | 55 +++++ src/NHibernate/Async/Type/EnumStringType.cs | 64 ++++++ src/NHibernate/Async/Type/IVersionType.cs | 37 ++++ src/NHibernate/Async/Type/Int32Type.cs | 63 ++++++ src/NHibernate/Async/Type/Int64Type.cs | 63 ++++++ .../Async/Type/PersistentEnumType.cs | 56 +++++ src/NHibernate/Async/Type/TicksType.cs | 44 ++++ .../Async/Type/TimeAsTimeSpanType.cs | 55 +++++ src/NHibernate/Async/Type/TimeSpanType.cs | 56 +++++ src/NHibernate/Async/Type/UInt16Type.cs | 63 ++++++ src/NHibernate/Async/Type/UInt32Type.cs | 63 ++++++ src/NHibernate/Async/Type/UInt64Type.cs | 63 ++++++ 36 files changed, 1658 insertions(+), 22 deletions(-) create mode 100644 src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs create mode 100644 src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs create mode 100644 src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs create mode 100644 src/NHibernate/Async/Engine/Versioning.cs create mode 100644 src/NHibernate/Async/Type/AbstractBinaryType.cs create mode 100644 src/NHibernate/Async/Type/AbstractDateTimeType.cs create mode 100644 src/NHibernate/Async/Type/ByteType.cs create mode 100644 src/NHibernate/Async/Type/DateTimeNoMsType.cs create mode 100644 src/NHibernate/Async/Type/DateTimeOffSetType.cs create mode 100644 src/NHibernate/Async/Type/EnumCharType.cs create mode 100644 src/NHibernate/Async/Type/EnumStringType.cs create mode 100644 src/NHibernate/Async/Type/IVersionType.cs create mode 100644 src/NHibernate/Async/Type/Int32Type.cs create mode 100644 src/NHibernate/Async/Type/Int64Type.cs create mode 100644 src/NHibernate/Async/Type/PersistentEnumType.cs create mode 100644 src/NHibernate/Async/Type/TicksType.cs create mode 100644 src/NHibernate/Async/Type/TimeAsTimeSpanType.cs create mode 100644 src/NHibernate/Async/Type/TimeSpanType.cs create mode 100644 src/NHibernate/Async/Type/UInt16Type.cs create mode 100644 src/NHibernate/Async/Type/UInt32Type.cs create mode 100644 src/NHibernate/Async/Type/UInt64Type.cs diff --git a/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs b/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs new file mode 100644 index 00000000000..af79cd5f272 --- /dev/null +++ b/src/NHibernate.Test/Async/Linq/ByMethod/MappedAsTests.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections.Generic; +using System.Linq; +using System.Text; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.Linq.ByMethod +{ + using System.Threading.Tasks; + [TestFixture] + public class MappedAsTestsAsync : LinqTestCase + { + [Test] + public async Task WithUnaryExpressionAsync() + { + var num = 1; + await (db.Orders.Where(o => o.Freight == (-num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + await (db.Orders.Where(o => o.Freight == ((decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + await (db.Orders.Where(o => o.Freight == ((decimal?) (decimal) num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + } + + [Test] + public async Task WithNewExpressionAsync() + { + var num = 1; + await (db.Orders.Where(o => o.Freight == new decimal(num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + } + + [Test] + public async Task WithMethodCallExpressionAsync() + { + var num = 1; + await (db.Orders.Where(o => o.Freight == GetDecimal(num).MappedAs(NHibernateUtil.Decimal)).ToListAsync()); + } + + private decimal GetDecimal(int number) + { + return number; + } + } +} diff --git a/src/NHibernate.Test/Async/Linq/WhereTests.cs b/src/NHibernate.Test/Async/Linq/WhereTests.cs index 64d4ee9597f..47809de4738 100644 --- a/src/NHibernate.Test/Async/Linq/WhereTests.cs +++ b/src/NHibernate.Test/Async/Linq/WhereTests.cs @@ -698,6 +698,24 @@ public async Task TimesheetsWithProjectionInSubqueryAsync() Assert.That(query.Count, Is.EqualTo(2)); } + [Test] + public async Task ContainsSubqueryWithCoalesceStringEnumSelectAsync() + { + if (Dialect is MsSqlCeDialect || Dialect is SQLiteDialect) + Assert.Ignore("Dialect is not supported"); + + var results = + await (db.Timesheets.Where( + o => + o.Users + .Where(u => u.Id != 0.MappedAs(NHibernateUtil.Int32)) + .Select(u => u.Name == u.Name ? u.Enum1 : u.NullableEnum1.Value) + .Contains(EnumStoredAsString.Small)) + .ToListAsync()); + + Assert.That(results.Count, Is.EqualTo(1)); + } + [Test] public async Task SearchOnObjectTypeWithExtensionMethodAsync() { diff --git a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs index fa11a5bd0a1..d9e4bfce8e4 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs @@ -22,6 +22,7 @@ namespace NHibernate.Test.NHSpecificTest.Dates { using System.Threading.Tasks; + using System.Threading; [TestFixture] public class DateTimeOffsetFixtureAsync : FixtureBaseAsync { @@ -75,5 +76,22 @@ public async Task SavingAndRetrievingTestAsync() await (tx.CommitAsync()); } } + + [Test] + public async Task NextAsync() + { + var type = NHibernateUtil.DateTimeOffset; + var current = DateTimeOffset.Now.AddTicks(-1); + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.That(next, Is.TypeOf().And.Property("Ticks").GreaterThan(current.Ticks)); + } + + [Test] + public async Task SeedAsync() + { + var type = NHibernateUtil.DateTimeOffset; + Assert.That(await (type.SeedAsync(null, CancellationToken.None)), Is.TypeOf()); + } } } diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs index 47ea9752af6..d2340d2098d 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3961/DateParametersComparedTo.cs @@ -65,6 +65,103 @@ protected override void OnTearDown() CultureInfo.CurrentUICulture = _backupUICulture; } + // Non-reg test case + [Test] + public async Task NonNullableMappedAsDateShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.Date)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Non-reg test case + [Test] + public async Task NonNullableMappedAsDateShouldIgnoreTimeAsync() + { + using (ISession session = OpenSession()) + { + var result = await (session.Query() + .Where(e => e.NonNullableDateTime == _testDate.AddMinutes(10).MappedAs(NHibernateUtil.Date)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Non-reg test case + [Test] + public async Task NonNullableMappedAsDateTimeShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Non-reg test case + [Test] + [Obsolete] + public async Task NonNullableMappedAsTimestampShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.Timestamp)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Non-reg test case + [Test] + public async Task NonNullableParameterValueShouldNotBeCachedWithMappedAsAndAsync() + { + // Dodges the query parameter formatting bug for showcasing the parameter value bug + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); + CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; + try + { + using (ISession session = OpenSession()) + { + var result = await (session.Query() + .Where(e => e.NonNullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + + var testDate = _testDate.AddMinutes(10); + result = await (session.Query() + .Where(e => e.NonNullableDateTime == testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + CollectionAssert.IsEmpty(result); + } + } + finally + { + CultureInfo.CurrentCulture = _testCulture; + CultureInfo.CurrentUICulture = _testCulture; + } + } + // Non-reg test case [Test] public async Task NonNullableShouldBeCultureAgnosticAsync() @@ -81,6 +178,104 @@ public async Task NonNullableShouldBeCultureAgnosticAsync() } } + // Failing test case till NH-3961 is fixed + [Test] + public async Task NullableMappedAsDateShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.Date)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Failing test case till NH-3961 is fixed + [Test] + public async Task NullableMappedAsDateShouldIgnoreTimeAsync() + { + var testDate = _testDate.AddMinutes(10); + using (ISession session = OpenSession()) + { + var result = await (session.Query() + .Where(e => e.NullableDateTime == testDate.MappedAs(NHibernateUtil.Date)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Failing test case till NH-3961 is fixed + [Test] + public async Task NullableMappedAsDateTimeShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Failing test case till NH-3961 is fixed + [Test] + [Obsolete] + public async Task NullableMappedAsTimestampShouldBeCultureAgnosticAsync() + { + using (ISession session = OpenSession()) + using (session.BeginTransaction()) + { + var result = await (session.Query() + .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.Timestamp)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + } + } + + // Failing test case till NH-3961 is fixed + [Test] + public async Task NullableParameterValueShouldNotBeCachedWithMappedAsAsync() + { + // Dodges the query parameter formatting bug for showcasing the parameter value bug + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); + CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture; + try + { + using (ISession session = OpenSession()) + { + var result = await (session.Query() + .Where(e => e.NullableDateTime == _testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + Assert.AreEqual(1, result.Count); + Assert.AreEqual("Bob", result[0].Name); + + var testDate = _testDate.AddMinutes(10); + result = await (session.Query() + .Where(e => e.NullableDateTime == testDate.MappedAs(NHibernateUtil.DateTime)) + .ToListAsync()); + + CollectionAssert.IsEmpty(result); + } + } + finally + { + CultureInfo.CurrentCulture = _testCulture; + CultureInfo.CurrentUICulture = _testCulture; + } + } + // Non-reg test case [Test] public async Task NullableShouldBeCultureAgnosticAsync() diff --git a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs index e57990472ec..4307080f4cf 100644 --- a/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/AbstractDateTimeTypeFixture.cs @@ -28,6 +28,7 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; + using System.Threading; [TestFixture] public abstract class AbstractDateTimeTypeFixtureAsync : TypeFixtureBase { @@ -80,6 +81,33 @@ protected override void DropSchema() base.DropSchema(); } + [Test] + public async Task NextAsync() + { + // Take some margin, as DbTimestampType takes its next value from the database, which + // may have its clock a bit shifted even if running on the same server. (Seen with PostgreSQL, + // off by a few seconds, and with SAP HANA running in a vm, off by twenty seconds.) + var current = Now.Subtract(TimeSpan.FromMinutes(2)); + var next = await (Type.NextAsync(current, null, CancellationToken.None)); + + Assert.That(next, Is.TypeOf(), "next should be DateTime"); + Assert.That(next, Is.GreaterThan(current), "next should be greater than current"); + } + + [Test] + public async Task SeedAsync() + { + Assert.That(await (Type.SeedAsync(null, CancellationToken.None)), Is.TypeOf(), "seed should be DateTime"); + } + + [Test] + public async Task ComparerAsync() + { + var v1 = await (Type.SeedAsync(null, CancellationToken.None)); + var v2 = Now.Subtract(TimeSpan.FromTicks(DateAccuracyInTicks)); + Assert.That(() => Type.Comparator.Compare(v1, v2), Throws.Nothing); + } + [Test] [TestCase(DateTimeKind.Unspecified)] [TestCase(DateTimeKind.Local)] diff --git a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs index 80b66c4671e..1c604513d85 100644 --- a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs @@ -22,6 +22,7 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; + using System.Threading; [TestFixture] public class DateTimeOffsetTypeFixtureAsync : TypeFixtureBase { @@ -74,6 +75,22 @@ protected override void DropSchema() base.DropSchema(); } + [Test] + public async Task NextAsync() + { + var current = DateTimeOffset.Parse("2004-01-01"); + var next = await (Type.NextAsync(current, null, CancellationToken.None)); + + Assert.That(next, Is.TypeOf(), "next should be DateTimeOffset"); + Assert.That(next, Is.GreaterThan(current), "next should be greater than current"); + } + + [Test] + public async Task SeedAsync() + { + Assert.That(await (Type.SeedAsync(null, CancellationToken.None)), Is.TypeOf(), "seed should be DateTime"); + } + [Test] public async Task ReadWriteAsync() { diff --git a/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs new file mode 100644 index 00000000000..ec6a264e176 --- /dev/null +++ b/src/NHibernate.Test/Async/TypesTest/Int32TypeFixture.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// +// 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 NHibernate.Type; +using NUnit.Framework; + +namespace NHibernate.Test.TypesTest +{ + using System.Threading.Tasks; + using System.Threading; + /// + /// Summary description for Int32TypeFixture. + /// + [TestFixture] + public class Int32TypeFixtureAsync + { + [Test] + public async Task NextAsync() + { + Int32Type type = (Int32Type) NHibernateUtil.Int32; + object current = (int) 1; + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.IsTrue(next is Int32, "Next should be Int32"); + Assert.AreEqual((int) 2, (int) next, "current should have been incremented to 2"); + } + + [Test] + public async Task SeedAsync() + { + Int32Type type = (Int32Type) NHibernateUtil.Int32; + Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int32, "seed should be Int32"); + } + } +} \ No newline at end of file diff --git a/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs new file mode 100644 index 00000000000..c0bf51f59cb --- /dev/null +++ b/src/NHibernate.Test/Async/TypesTest/Int64TypeFixture.cs @@ -0,0 +1,61 @@ +//------------------------------------------------------------------------------ +// +// 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 NHibernate.Type; +using NUnit.Framework; +using NHibernate.Engine; + +namespace NHibernate.Test.TypesTest +{ + using System.Threading.Tasks; + using System.Threading; + /// + /// Summary description for Int64TypeFixture. + /// + [TestFixture] + public class Int64TypeFixtureAsync: TestCase + { + [Test] + public async Task NextAsync() + { + Int64Type type = NHibernateUtil.Int64; + object current = (long)1; + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.IsTrue(next is Int64, "Next should be Int64"); + Assert.AreEqual((long)2, (long)next, "current should have been incremented to 2"); + } + + [Test] + public async Task SeedAsync() + { + Int64Type type = NHibernateUtil.Int64; + Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int64, "seed should be int64"); + } + + [Test] + public async Task NullableWrapperDirtyAsync() + { + Int64Type type = NHibernateUtil.Int64; + + long? nullLong = null; + long? valueLong = 5; + long? fiveAgain = 5; + using (ISession s = OpenSession()) + { + Assert.IsTrue(await (type.IsDirtyAsync(nullLong, valueLong, (ISessionImplementor)s, CancellationToken.None)), "should be dirty - null to '5'"); + Assert.IsFalse(await (type.IsDirtyAsync(valueLong, fiveAgain, (ISessionImplementor)s, CancellationToken.None)), "should not be dirty - 5 to 5"); + } + } + + protected override string[] Mappings => Array.Empty(); + } +} diff --git a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs index c65ba8150c2..f9c585d7956 100644 --- a/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/TimeAsTimeSpanTypeFixture.cs @@ -15,6 +15,32 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; + using System.Threading; + /// + /// Summary description for TimeAsTimeSpanTypeFixture. + /// + [TestFixture] + public class TimeAsTimeSpanTypeFixtureAsync + { + [Test] + public async Task NextAsync() + { + var type = (TimeAsTimeSpanType) NHibernateUtil.TimeAsTimeSpan; + object current = new TimeSpan(DateTime.Now.Ticks - 5); + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.IsTrue(next is TimeSpan, "Next should be TimeSpan"); + Assert.IsTrue((TimeSpan) next > (TimeSpan) current, + "next should be greater than current (could be equal depending on how quickly this occurs)"); + } + + [Test] + public async Task SeedAsync() + { + var type = (TimeAsTimeSpanType) NHibernateUtil.TimeAsTimeSpan; + Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is TimeSpan, "seed should be TimeSpan"); + } + } [TestFixture] public class TimeSpanFixture2Async : TypeFixtureBase diff --git a/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs index 4b32c30ada2..da729786501 100644 --- a/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/TimeSpanTypeFixture.cs @@ -15,6 +15,32 @@ namespace NHibernate.Test.TypesTest { using System.Threading.Tasks; + using System.Threading; + /// + /// Summary description for TimeSpanTypeFixture. + /// + [TestFixture] + public class TimeSpanTypeFixtureAsync + { + [Test] + public async Task NextAsync() + { + var type = (TimeSpanType) NHibernateUtil.TimeSpan; + object current = new TimeSpan(DateTime.Now.Ticks - 5); + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.IsTrue(next is TimeSpan, "Next should be TimeSpan"); + Assert.IsTrue((TimeSpan) next > (TimeSpan) current, + "next should be greater than current (could be equal depending on how quickly this occurs)"); + } + + [Test] + public async Task SeedAsync() + { + var type = (TimeSpanType) NHibernateUtil.TimeSpan; + Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is TimeSpan, "seed should be TimeSpan"); + } + } [TestFixture] public class TimeSpanTypeFixture2Async : TypeFixtureBase diff --git a/src/NHibernate/Async/Engine/Versioning.cs b/src/NHibernate/Async/Engine/Versioning.cs new file mode 100644 index 00000000000..061f598a9b8 --- /dev/null +++ b/src/NHibernate/Async/Engine/Versioning.cs @@ -0,0 +1,90 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using NHibernate.Persister.Entity; +using NHibernate.Type; + +namespace NHibernate.Engine +{ + using System.Threading.Tasks; + using System.Threading; + public partial class Versioning + { + + /// + /// Increment the given version number + /// + /// The value of the current version. + /// The of the versioned property. + /// The current . + /// A cancellation token that can be used to cancel the work + /// Returns the next value for the version. + public static async Task IncrementAsync(object version, IVersionType versionType, ISessionImplementor session, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + object next = await (versionType.NextAsync(version, session, cancellationToken)).ConfigureAwait(false); + if (log.IsDebugEnabled()) + { + log.Debug("Incrementing: {0} to {1}", + versionType.ToLoggableString(version, session.Factory), + versionType.ToLoggableString(next, session.Factory)); + } + return next; + } + + /// + /// Create an initial version number + /// + /// The of the versioned property. + /// The current . + /// A cancellation token that can be used to cancel the work + /// A seed value to initialize the versioned property with. + public static async Task SeedAsync(IVersionType versionType, ISessionImplementor session, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + object seed = await (versionType.SeedAsync(session, cancellationToken)).ConfigureAwait(false); + if (log.IsDebugEnabled()) + { + log.Debug("Seeding: {0}", seed); + } + return seed; + } + + /// + /// Seed the given instance state snapshot with an initial version number + /// + /// An array of objects that contains a snapshot of a persistent object. + /// The index of the version property in the fields parameter. + /// The of the versioned property. + /// Force the version to initialize + /// The current session, if any. + /// A cancellation token that can be used to cancel the work + /// if the version property needs to be seeded with an initial value. + public static async Task SeedVersionAsync(object[] fields, int versionProperty, IVersionType versionType, bool? force, + ISessionImplementor session, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + object initialVersion = fields[versionProperty]; + if (initialVersion == null || !force.HasValue || force.Value) + { + fields[versionProperty] = await (SeedAsync(versionType, session, cancellationToken)).ConfigureAwait(false); + return true; + } + else + { + if (log.IsDebugEnabled()) + { + log.Debug("using initial version: {0}", initialVersion); + } + return false; + } + } + } +} diff --git a/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs b/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs index 501004fe18c..0d7213cc0ad 100644 --- a/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs +++ b/src/NHibernate/Async/Event/Default/AbstractSaveEventListener.cs @@ -206,7 +206,7 @@ protected virtual async Task PerformSaveOrReplicateAsync(object entity, object[] values = persister.GetPropertyValuesToInsert(entity, GetMergeMap(anything), source); IType[] types = persister.PropertyTypes; - bool substitute = SubstituteValuesIfNecessary(entity, id, values, persister, source); + bool substitute = await (SubstituteValuesIfNecessaryAsync(entity, id, values, persister, source, cancellationToken)).ConfigureAwait(false); if (persister.HasCollections) { @@ -278,6 +278,35 @@ protected virtual async Task VisitCollectionsBeforeSaveAsync(object entity return visitor.SubstitutionRequired; } + /// + /// Perform any property value substitution that is necessary + /// (interceptor callback, version initialization...) + /// + /// The entity + /// The entity identifier + /// The snapshot entity state + /// The entity persister + /// The originating session + /// A cancellation token that can be used to cancel the work + /// + /// True if the snapshot state changed such that + /// reinjection of the values into the entity is required. + /// + protected virtual async Task SubstituteValuesIfNecessaryAsync(object entity, object id, object[] values, IEntityPersister persister, ISessionImplementor source, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + bool substitute = source.Interceptor.OnSave(entity, id, values, persister.PropertyNames, persister.PropertyTypes); + + //keep the existing version number in the case of replicate! + if (persister.IsVersioned) + { + // NH Specific feature (H3.2 use null value for versionProperty; NH ask to persister to know if a valueType mean unversioned) + object versionValue = values[persister.VersionProperty]; + substitute |= await (Versioning.SeedVersionAsync(values, persister.VersionProperty, persister.VersionType, persister.IsUnsavedVersion(versionValue), source, cancellationToken)).ConfigureAwait(false); + } + return substitute; + } + /// Handles the calls needed to perform pre-save cascades for the given entity. /// The session from which the save event originated. /// The entity's persister instance. diff --git a/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs b/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs index a4d0874e627..d70bbb4b562 100644 --- a/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs +++ b/src/NHibernate/Async/Event/Default/DefaultFlushEntityEventListener.cs @@ -231,7 +231,7 @@ private async Task ScheduleUpdateAsync(FlushEntityEvent @event, Cancellati Validate(entity, persister, status); // increment the version number (if necessary) - object nextVersion = GetNextVersion(@event); + object nextVersion = await (GetNextVersionAsync(@event, cancellationToken)).ConfigureAwait(false); // if it was dirtied by a collection only int[] dirtyProperties = @event.DirtyProperties; @@ -296,6 +296,41 @@ protected virtual async Task HandleInterceptionAsync(FlushEntityEvent @eve return intercepted; } + private async Task GetNextVersionAsync(FlushEntityEvent @event, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + // Convience method to retrieve an entities next version value + EntityEntry entry = @event.EntityEntry; + IEntityPersister persister = entry.Persister; + if (persister.IsVersioned) + { + object[] values = @event.PropertyValues; + + if (entry.IsBeingReplicated) + { + return Versioning.GetVersion(values, persister); + } + else + { + int[] dirtyProperties = @event.DirtyProperties; + + bool isVersionIncrementRequired = IsVersionIncrementRequired(@event, entry, persister, dirtyProperties); + + object nextVersion = isVersionIncrementRequired ? + await (Versioning.IncrementAsync(entry.Version, persister.VersionType, @event.Session, cancellationToken)).ConfigureAwait(false) : + entry.Version; //use the current version + + Versioning.SetVersion(values, nextVersion, persister); + + return nextVersion; + } + } + else + { + return null; + } + } + /// /// Performs all necessary checking to determine if an entity needs an SQL update /// to synchronize its state to the database. Modifies the event by side-effect! diff --git a/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs b/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs index 00865e3f2b0..124f45d1755 100644 --- a/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs +++ b/src/NHibernate/Async/Event/Default/DefaultReplicateEventListener.cs @@ -146,6 +146,22 @@ private async Task CascadeAfterReplicateAsync(object entity, IEntityPersister pe } } + protected override Task SubstituteValuesIfNecessaryAsync(object entity, object id, object[] values, IEntityPersister persister, ISessionImplementor source, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(SubstituteValuesIfNecessary(entity, id, values, persister, source)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + protected override async Task VisitCollectionsBeforeSaveAsync(object entity, object id, object[] values, Type.IType[] types, IEventSource source, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); diff --git a/src/NHibernate/Async/Impl/StatelessSessionImpl.cs b/src/NHibernate/Async/Impl/StatelessSessionImpl.cs index 5327b490ce3..e2e53333e39 100644 --- a/src/NHibernate/Async/Impl/StatelessSessionImpl.cs +++ b/src/NHibernate/Async/Impl/StatelessSessionImpl.cs @@ -381,8 +381,8 @@ public async Task ManagedCloseAsync(CancellationToken cancellationToken) if (persister.IsVersioned) { object versionValue = state[persister.VersionProperty]; - bool substitute = Versioning.SeedVersion(state, persister.VersionProperty, persister.VersionType, - persister.IsUnsavedVersion(versionValue), this); + bool substitute = await (Versioning.SeedVersionAsync(state, persister.VersionProperty, persister.VersionType, + persister.IsUnsavedVersion(versionValue), this, cancellationToken)).ConfigureAwait(false); if (substitute) { persister.SetPropertyValues(entity, state); @@ -429,7 +429,7 @@ public async Task ManagedCloseAsync(CancellationToken cancellationToken) if (persister.IsVersioned) { oldVersion = persister.GetVersion(entity); - object newVersion = Versioning.Increment(oldVersion, persister.VersionType, this); + object newVersion = await (Versioning.IncrementAsync(oldVersion, persister.VersionType, this, cancellationToken)).ConfigureAwait(false); Versioning.SetVersion(state, newVersion, persister); persister.SetPropertyValues(entity, state); } diff --git a/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs b/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs index 422beb8174d..56bdd82c0c4 100644 --- a/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs +++ b/src/NHibernate/Async/Param/VersionTypeSeedParameterSpecification.cs @@ -25,21 +25,11 @@ public partial class VersionTypeSeedParameterSpecification : IParameterSpecifica #region IParameterSpecification Members - public Task BindAsync(DbCommand command, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) + public async Task BindAsync(DbCommand command, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) { - if (cancellationToken.IsCancellationRequested) - { - return Task.FromCanceled(cancellationToken); - } - try - { - int position = sqlQueryParametersList.GetEffectiveParameterLocations(IdBackTrack).Single(); // version parameter can't appear more than once - return type.NullSafeSetAsync(command, type.Seed(session), position, session, cancellationToken); - } - catch (Exception ex) - { - return Task.FromException(ex); - } + cancellationToken.ThrowIfCancellationRequested(); + int position = sqlQueryParametersList.GetEffectiveParameterLocations(IdBackTrack).Single(); // version parameter can't appear more than once + await (type.NullSafeSetAsync(command, await (type.SeedAsync(session, cancellationToken)).ConfigureAwait(false), position, session, cancellationToken)).ConfigureAwait(false); } public Task BindAsync(DbCommand command, IList multiSqlQueryParametersList, int singleSqlParametersOffset, IList sqlQueryParametersList, QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken) diff --git a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs index ad3b8590044..1e9ec77f2ba 100644 --- a/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs +++ b/src/NHibernate/Async/Persister/Entity/AbstractEntityPersister.cs @@ -203,7 +203,7 @@ public Task ForceVersionIncrementAsync(object id, object currentVersion, async Task InternalForceVersionIncrementAsync() { - object nextVersion = VersionType.Next(currentVersion, session); + object nextVersion = await (VersionType.NextAsync(currentVersion, session, cancellationToken)).ConfigureAwait(false); if (log.IsDebugEnabled()) { log.Debug("Forcing version increment [{0}; {1} -> {2}]", diff --git a/src/NHibernate/Async/Type/AbstractBinaryType.cs b/src/NHibernate/Async/Type/AbstractBinaryType.cs new file mode 100644 index 00000000000..ebe6d864485 --- /dev/null +++ b/src/NHibernate/Async/Type/AbstractBinaryType.cs @@ -0,0 +1,67 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data.Common; +using System.Text; +using NHibernate.Engine; +using NHibernate.SqlTypes; +using NHibernate.Util; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public abstract partial class AbstractBinaryType : MutableType, IVersionType, IComparer + { + + #region IVersionType Members + + // Note : simply returns null for seed() and next() as the only known + // application of binary types for versioning is for use with the + // TIMESTAMP datatype supported by Sybase and SQL Server, which + // are completely db-generated values... + + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/AbstractDateTimeType.cs b/src/NHibernate/Async/Type/AbstractDateTimeType.cs new file mode 100644 index 00000000000..827ac034995 --- /dev/null +++ b/src/NHibernate/Async/Type/AbstractDateTimeType.cs @@ -0,0 +1,51 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data.Common; +using System.Globalization; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public abstract partial class AbstractDateTimeType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType + { + + #region IVersionType Members + + /// + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) => + SeedAsync(session, cancellationToken); + + /// + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/ByteType.cs b/src/NHibernate/Async/Type/ByteType.cs new file mode 100644 index 00000000000..0d38fdf1a71 --- /dev/null +++ b/src/NHibernate/Async/Type/ByteType.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data; +using System.Data.Common; +using System.Numerics; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class ByteType : PrimitiveType, IDiscriminatorType, IVersionType + { + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} diff --git a/src/NHibernate/Async/Type/CustomType.cs b/src/NHibernate/Async/Type/CustomType.cs index d14a79d560e..ca1483b29fb 100644 --- a/src/NHibernate/Async/Type/CustomType.cs +++ b/src/NHibernate/Async/Type/CustomType.cs @@ -90,6 +90,46 @@ public override async Task IsDirtyAsync(object old, object current, bool[] return checkable[0] && await (IsDirtyAsync(old, current, session, cancellationToken)).ConfigureAwait(false); } + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (!(userType is IUserVersionType userVersionType)) + throw new InvalidOperationException( + $"User type {userType} does not implement {nameof(IUserVersionType)}, Either implement it, or " + + $"avoid using this user type as a version type."); + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (!(userType is IUserVersionType userVersionType)) + throw new InvalidOperationException( + $"User type {userType} does not implement {nameof(IUserVersionType)}, Either implement it, or " + + $"avoid using this user type as a version type."); + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + public override Task ReplaceAsync(object original, object current, ISessionImplementor session, object owner, IDictionary copiedAlready, CancellationToken cancellationToken) { diff --git a/src/NHibernate/Async/Type/DateTimeNoMsType.cs b/src/NHibernate/Async/Type/DateTimeNoMsType.cs new file mode 100644 index 00000000000..6a8276e1b39 --- /dev/null +++ b/src/NHibernate/Async/Type/DateTimeNoMsType.cs @@ -0,0 +1,42 @@ +//------------------------------------------------------------------------------ +// +// 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 NHibernate.Engine; +using System.Data; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class DateTimeNoMsType : AbstractDateTimeType + { + + #region IVersionType Members + + public override Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/DateTimeOffSetType.cs b/src/NHibernate/Async/Type/DateTimeOffSetType.cs new file mode 100644 index 00000000000..2eedce9041f --- /dev/null +++ b/src/NHibernate/Async/Type/DateTimeOffSetType.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType + { + + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + return SeedAsync(session, cancellationToken); + } + + /// + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} diff --git a/src/NHibernate/Async/Type/DbTimestampType.cs b/src/NHibernate/Async/Type/DbTimestampType.cs index 63a7f3db6a1..cfa172aeca9 100644 --- a/src/NHibernate/Async/Type/DbTimestampType.cs +++ b/src/NHibernate/Async/Type/DbTimestampType.cs @@ -31,12 +31,12 @@ public override async Task SeedAsync(ISessionImplementor session, Cancel if (session == null) { log.Debug("incoming session was null; using current application host time"); - return base.Seed(null); + return await (base.SeedAsync(null, cancellationToken)).ConfigureAwait(false); } if (!SupportsCurrentTimestampSelection(session.Factory.Dialect)) { log.Info("falling back to application host based timestamp, as dialect does not support current timestamp selection"); - return base.Seed(session); + return await (base.SeedAsync(session, cancellationToken)).ConfigureAwait(false); } return await (GetCurrentTimestampAsync(session, cancellationToken)).ConfigureAwait(false); } diff --git a/src/NHibernate/Async/Type/EnumCharType.cs b/src/NHibernate/Async/Type/EnumCharType.cs new file mode 100644 index 00000000000..fe9eb513dbe --- /dev/null +++ b/src/NHibernate/Async/Type/EnumCharType.cs @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// +// 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.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class EnumCharType : AbstractEnumType + { + + public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Assemble(cached, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Disassemble(value, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} diff --git a/src/NHibernate/Async/Type/EnumStringType.cs b/src/NHibernate/Async/Type/EnumStringType.cs new file mode 100644 index 00000000000..3da2325af89 --- /dev/null +++ b/src/NHibernate/Async/Type/EnumStringType.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// 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.Data; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public abstract partial class EnumStringType : AbstractEnumType + { + + /// + /// + /// + /// + /// + /// + /// A cancellation token that can be used to cancel the work + /// + public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Assemble(cached, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Disassemble(value, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} diff --git a/src/NHibernate/Async/Type/IVersionType.cs b/src/NHibernate/Async/Type/IVersionType.cs new file mode 100644 index 00000000000..f4a17f28986 --- /dev/null +++ b/src/NHibernate/Async/Type/IVersionType.cs @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using NHibernate.Engine; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial interface IVersionType : IType + { + /// + /// When implemented by a class, increments the version. + /// + /// The current version + /// The current session, if available. + /// A cancellation token that can be used to cancel the work + /// an instance of the that has been incremented. + Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken); + + /// + /// When implemented by a class, gets an initial version. + /// + /// The current session, if available. + /// A cancellation token that can be used to cancel the work + /// An instance of the type. + Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken); + } +} diff --git a/src/NHibernate/Async/Type/Int32Type.cs b/src/NHibernate/Async/Type/Int32Type.cs new file mode 100644 index 00000000000..3b4217968dd --- /dev/null +++ b/src/NHibernate/Async/Type/Int32Type.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; +using System.Collections.Generic; +using System.Data; +using System.Numerics; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class Int32Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + #region IVersionType Members + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/Int64Type.cs b/src/NHibernate/Async/Type/Int64Type.cs new file mode 100644 index 00000000000..e1b07967cbd --- /dev/null +++ b/src/NHibernate/Async/Type/Int64Type.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Numerics; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class Int64Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + #region IVersionType Members + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/PersistentEnumType.cs b/src/NHibernate/Async/Type/PersistentEnumType.cs new file mode 100644 index 00000000000..df295d96308 --- /dev/null +++ b/src/NHibernate/Async/Type/PersistentEnumType.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections.Generic; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class PersistentEnumType : AbstractEnumType + { + + public override Task AssembleAsync(object cached, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Assemble(cached, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public override Task DisassembleAsync(object value, ISessionImplementor session, object owner, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Disassemble(value, session, owner)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} diff --git a/src/NHibernate/Async/Type/TicksType.cs b/src/NHibernate/Async/Type/TicksType.cs new file mode 100644 index 00000000000..0ffb06b37f6 --- /dev/null +++ b/src/NHibernate/Async/Type/TicksType.cs @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------ +// +// 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.Data; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class TicksType : AbstractDateTimeType + { + + #region IVersionType Members + + public override Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs new file mode 100644 index 00000000000..185baa88eba --- /dev/null +++ b/src/NHibernate/Async/Type/TimeAsTimeSpanType.cs @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; +using System.Collections.Generic; +using System.Data; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class TimeAsTimeSpanType : PrimitiveType, IVersionType + { + + #region IVersionType Members + + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + return SeedAsync(session, cancellationToken); + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/TimeSpanType.cs b/src/NHibernate/Async/Type/TimeSpanType.cs new file mode 100644 index 00000000000..0917413671c --- /dev/null +++ b/src/NHibernate/Async/Type/TimeSpanType.cs @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; +using System.Collections.Generic; +using System.Data; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class TimeSpanType : PrimitiveType, IVersionType, ILiteralType + { + + #region IVersionType Members + + public Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + return SeedAsync(session, cancellationToken); + } + + /// + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/UInt16Type.cs b/src/NHibernate/Async/Type/UInt16Type.cs new file mode 100644 index 00000000000..cfd05ee60f6 --- /dev/null +++ b/src/NHibernate/Async/Type/UInt16Type.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Numerics; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class UInt16Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + #region IVersionType Members + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/UInt32Type.cs b/src/NHibernate/Async/Type/UInt32Type.cs new file mode 100644 index 00000000000..2fa37d01162 --- /dev/null +++ b/src/NHibernate/Async/Type/UInt32Type.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Numerics; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class UInt32Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + #region IVersionType Members + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} diff --git a/src/NHibernate/Async/Type/UInt64Type.cs b/src/NHibernate/Async/Type/UInt64Type.cs new file mode 100644 index 00000000000..d2db5e47c99 --- /dev/null +++ b/src/NHibernate/Async/Type/UInt64Type.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Numerics; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class UInt64Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + #region IVersionType Members + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + #endregion + } +} From cd9d5e16aaf9249343e2ab227bc2d46d0d00ec2c Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:43:36 +1000 Subject: [PATCH 08/14] Revert redundant change --- src/NHibernate/Type/TimeType.cs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/NHibernate/Type/TimeType.cs b/src/NHibernate/Type/TimeType.cs index e7fc217bdd1..c095ef0c0d2 100644 --- a/src/NHibernate/Type/TimeType.cs +++ b/src/NHibernate/Type/TimeType.cs @@ -43,7 +43,10 @@ public TimeType(TimeSqlType sqlType) : base(sqlType) { } - public override string Name => "Time"; + public override string Name + { + get { return "Time"; } + } public override object Get(DbDataReader rs, int index, ISessionImplementor session) { @@ -63,7 +66,10 @@ public override object Get(DbDataReader rs, int index, ISessionImplementor sessi } } - public override System.Type ReturnedClass => typeof(DateTime); + public override System.Type ReturnedClass + { + get { return typeof(DateTime); } + } public override void Set(DbCommand st, object value, int index, ISessionImplementor session) { @@ -149,9 +155,15 @@ public override object FromStringValue(string xml) return DateTime.Parse(xml); } - public override System.Type PrimitiveClass => typeof(DateTime); + public override System.Type PrimitiveClass + { + get { return typeof(DateTime); } + } - public override object DefaultValue => BaseDateValue; + public override object DefaultValue + { + get { return BaseDateValue; } + } public override string ObjectToSQLString(object value, Dialect.Dialect dialect) { From 21a6e441c829bf6e682df0d1aa5c77d305b9a199 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:45:17 +1000 Subject: [PATCH 09/14] Revert primary constructor --- src/NHibernate/Type/Int16Type.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/NHibernate/Type/Int16Type.cs b/src/NHibernate/Type/Int16Type.cs index 07ca82c81dd..cfd21908465 100644 --- a/src/NHibernate/Type/Int16Type.cs +++ b/src/NHibernate/Type/Int16Type.cs @@ -14,10 +14,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public partial class Int16Type() : PrimitiveType(SqlTypeFactory.Int16), IDiscriminatorType, IVersionType + public partial class Int16Type : PrimitiveType, IDiscriminatorType, IVersionType { private static readonly object ZeroObject = (short) 0; + /// + public Int16Type() : base(SqlTypeFactory.Int16) + { + } + /// public override string Name => "Int16"; @@ -66,8 +71,6 @@ public override object FromStringValue(string xml) return Int16.Parse(xml); } - #region IVersionType Members - public virtual object Next(object current, ISessionImplementor session) { return (Int16)((Int16)current + 1); @@ -80,8 +83,6 @@ public virtual object Seed(ISessionImplementor session) public IComparer Comparator => Comparer.Default; - #endregion - public override System.Type PrimitiveClass => typeof (Int16); public override object DefaultValue => ZeroObject; From 9124d4edf8cff5cde4d486a8c46150598f0baefe Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 12:46:18 +1000 Subject: [PATCH 10/14] Revert primary constructor --- src/NHibernate/Type/GuidType.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/NHibernate/Type/GuidType.cs b/src/NHibernate/Type/GuidType.cs index 9d3ffb07207..2dc627d5d09 100644 --- a/src/NHibernate/Type/GuidType.cs +++ b/src/NHibernate/Type/GuidType.cs @@ -11,10 +11,15 @@ namespace NHibernate.Type /// to a column. /// [Serializable] - public class GuidType() : PrimitiveType(SqlTypeFactory.Guid), IDiscriminatorType + public class GuidType : PrimitiveType, IDiscriminatorType { private static readonly object EmptyObject = Guid.Empty; + /// + public GuidType() : base(SqlTypeFactory.Guid) + { + } + public override object Get(DbDataReader rs, int index, ISessionImplementor session) { if (rs.GetFieldType(index) == typeof (Guid)) From f479ce7a03e4b69c5bb25fdefeea5c6cf155330a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 23 May 2024 02:49:53 +0000 Subject: [PATCH 11/14] Generate async files --- .../Async/TypesTest/Int16TypeFixture.cs | 43 ++++++++++++++ src/NHibernate/Async/Type/Int16Type.cs | 59 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs create mode 100644 src/NHibernate/Async/Type/Int16Type.cs diff --git a/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs new file mode 100644 index 00000000000..8983ffef5c3 --- /dev/null +++ b/src/NHibernate.Test/Async/TypesTest/Int16TypeFixture.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// +// 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 NHibernate.Type; +using NUnit.Framework; + +namespace NHibernate.Test.TypesTest +{ + using System.Threading.Tasks; + using System.Threading; + /// + /// Summary description for Int16TypeFixture. + /// + [TestFixture] + public class Int16TypeFixtureAsync + { + [Test] + public async Task NextAsync() + { + Int16Type type = (Int16Type) NHibernateUtil.Int16; + object current = (short) 1; + object next = await (type.NextAsync(current, null, CancellationToken.None)); + + Assert.IsTrue(next is Int16, "Next should be Int16"); + Assert.AreEqual((short) 2, (short) next, "current should have been incremented to 2"); + } + + [Test] + public async Task SeedAsync() + { + Int16Type type = (Int16Type) NHibernateUtil.Int16; + Assert.IsTrue(await (type.SeedAsync(null, CancellationToken.None)) is Int16, "seed should be int16"); + } + } +} \ No newline at end of file diff --git a/src/NHibernate/Async/Type/Int16Type.cs b/src/NHibernate/Async/Type/Int16Type.cs new file mode 100644 index 00000000000..598f83c5aa5 --- /dev/null +++ b/src/NHibernate/Async/Type/Int16Type.cs @@ -0,0 +1,59 @@ +//------------------------------------------------------------------------------ +// +// 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.Collections; +using System.Data.Common; +using NHibernate.Engine; +using NHibernate.SqlTypes; +using System.Collections.Generic; +using System.Data; +using System.Numerics; + +namespace NHibernate.Type +{ + using System.Threading.Tasks; + using System.Threading; + public partial class Int16Type : PrimitiveType, IDiscriminatorType, IVersionType + { + + public virtual Task NextAsync(object current, ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Next(current, session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + + public virtual Task SeedAsync(ISessionImplementor session, CancellationToken cancellationToken) + { + if (cancellationToken.IsCancellationRequested) + { + return Task.FromCanceled(cancellationToken); + } + try + { + return Task.FromResult(Seed(session)); + } + catch (Exception ex) + { + return Task.FromException(ex); + } + } + } +} From 601cb9e8be11abfcc2ed68aaa04e0c0a6a8b4301 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 13:51:55 +1000 Subject: [PATCH 12/14] Revert erroneous changes --- src/NHibernate/Type/AbstractCharType.cs | 2 +- src/NHibernate/Type/BooleanType.cs | 3 ++- src/NHibernate/Type/DateTimeOffSetType.cs | 2 +- src/NHibernate/Type/DoubleType.cs | 4 ++-- src/NHibernate/Type/TimeAsTimeSpanType.cs | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/NHibernate/Type/AbstractCharType.cs b/src/NHibernate/Type/AbstractCharType.cs index 896c33c8774..ba2ad5bb761 100644 --- a/src/NHibernate/Type/AbstractCharType.cs +++ b/src/NHibernate/Type/AbstractCharType.cs @@ -12,7 +12,7 @@ namespace NHibernate.Type public abstract class AbstractCharType : PrimitiveType, IDiscriminatorType { /// - protected AbstractCharType(SqlType sqlType) : base(sqlType) + public AbstractCharType(SqlType sqlType) : base(sqlType) { } diff --git a/src/NHibernate/Type/BooleanType.cs b/src/NHibernate/Type/BooleanType.cs index de78b574ae9..c861522981e 100644 --- a/src/NHibernate/Type/BooleanType.cs +++ b/src/NHibernate/Type/BooleanType.cs @@ -17,7 +17,8 @@ public class BooleanType : PrimitiveType, IDiscriminatorType protected static readonly object TrueObject = true; protected static readonly object FalseObject = false; - public BooleanType() : this((AnsiStringFixedLengthSqlType) SqlTypeFactory.Boolean) + /// + public BooleanType() : base(SqlTypeFactory.Boolean) { } diff --git a/src/NHibernate/Type/DateTimeOffSetType.cs b/src/NHibernate/Type/DateTimeOffSetType.cs index e9c4f45bd85..10bfa4f6804 100644 --- a/src/NHibernate/Type/DateTimeOffSetType.cs +++ b/src/NHibernate/Type/DateTimeOffSetType.cs @@ -16,7 +16,7 @@ public partial class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiter { private static readonly object BaseDateValue = DateTimeOffset.MinValue; - public DateTimeOffsetType() : this((DateTimeOffsetSqlType) SqlTypeFactory.DateTimeOffSet) + public DateTimeOffsetType() : base(SqlTypeFactory.DateTimeOffSet) { } diff --git a/src/NHibernate/Type/DoubleType.cs b/src/NHibernate/Type/DoubleType.cs index 796ca35e611..45b5713f525 100644 --- a/src/NHibernate/Type/DoubleType.cs +++ b/src/NHibernate/Type/DoubleType.cs @@ -16,8 +16,8 @@ public class DoubleType : PrimitiveType { private static readonly object ZeroObject = 0D; - /// - public DoubleType() : this(SqlTypeFactory.Double) + /// + public DoubleType() : base(SqlTypeFactory.Double) { } diff --git a/src/NHibernate/Type/TimeAsTimeSpanType.cs b/src/NHibernate/Type/TimeAsTimeSpanType.cs index 860e90cb254..f5218c0775c 100644 --- a/src/NHibernate/Type/TimeAsTimeSpanType.cs +++ b/src/NHibernate/Type/TimeAsTimeSpanType.cs @@ -19,8 +19,8 @@ public partial class TimeAsTimeSpanType : PrimitiveType, IVersionType private static readonly object ZeroObject = TimeSpan.Zero; private static readonly DateTime BaseDateValue = new DateTime(1753, 01, 01); - - public TimeAsTimeSpanType() : this((TimeSqlType) SqlTypeFactory.Time) + /// + public TimeAsTimeSpanType() : base(SqlTypeFactory.Time) { } From 88533432f14703cee6d99b709f8b3b99a6f4fdc1 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Thu, 23 May 2024 13:52:50 +1000 Subject: [PATCH 13/14] Revert unneeded changes --- src/NHibernate/Type/BooleanType.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/NHibernate/Type/BooleanType.cs b/src/NHibernate/Type/BooleanType.cs index c861522981e..d93e23e0385 100644 --- a/src/NHibernate/Type/BooleanType.cs +++ b/src/NHibernate/Type/BooleanType.cs @@ -17,12 +17,23 @@ public class BooleanType : PrimitiveType, IDiscriminatorType protected static readonly object TrueObject = true; protected static readonly object FalseObject = false; - /// + /// + /// Initialize a new instance of the BooleanType + /// + /// This is used when the Property is mapped to a native boolean type. public BooleanType() : base(SqlTypeFactory.Boolean) { } - /// + /// + /// Initialize a new instance of the BooleanType class using a + /// . + /// + /// The underlying . + /// + /// This is used when the Property is mapped to a string column + /// that stores true or false as a string. + /// public BooleanType(AnsiStringFixedLengthSqlType sqlType) : base(sqlType) { } From 80d535c355de3d7a0d8194d6a6af84db1493fb61 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Fri, 24 May 2024 08:50:03 +1000 Subject: [PATCH 14/14] Use suffixes instead of cast --- src/NHibernate/Type/Int64Type.cs | 2 +- src/NHibernate/Type/SingleType.cs | 2 +- src/NHibernate/Type/UInt32Type.cs | 2 +- src/NHibernate/Type/UInt64Type.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NHibernate/Type/Int64Type.cs b/src/NHibernate/Type/Int64Type.cs index 45eb37b8366..b86cb619443 100644 --- a/src/NHibernate/Type/Int64Type.cs +++ b/src/NHibernate/Type/Int64Type.cs @@ -16,7 +16,7 @@ namespace NHibernate.Type [Serializable] public partial class Int64Type : PrimitiveType, IDiscriminatorType, IVersionType { - private static readonly object ZeroObject = (Int64) 0; + private static readonly object ZeroObject = 0L; /// public Int64Type() : base(SqlTypeFactory.Int64) diff --git a/src/NHibernate/Type/SingleType.cs b/src/NHibernate/Type/SingleType.cs index 3bc568d0ac3..a5d56ce9ade 100644 --- a/src/NHibernate/Type/SingleType.cs +++ b/src/NHibernate/Type/SingleType.cs @@ -18,7 +18,7 @@ namespace NHibernate.Type [Serializable] public class SingleType : PrimitiveType { - private static readonly object ZeroObject = (float) 0; + private static readonly object ZeroObject = 0F; public SingleType() : this(SqlTypeFactory.Single) { diff --git a/src/NHibernate/Type/UInt32Type.cs b/src/NHibernate/Type/UInt32Type.cs index 97654cc032b..e0e30b65f2f 100644 --- a/src/NHibernate/Type/UInt32Type.cs +++ b/src/NHibernate/Type/UInt32Type.cs @@ -16,7 +16,7 @@ namespace NHibernate.Type [Serializable] public partial class UInt32Type : PrimitiveType, IDiscriminatorType, IVersionType { - private static readonly object ZeroObject = (UInt32) 0; + private static readonly object ZeroObject = 0U; /// public UInt32Type() : base(SqlTypeFactory.UInt32) diff --git a/src/NHibernate/Type/UInt64Type.cs b/src/NHibernate/Type/UInt64Type.cs index 2558ebbd117..8d0c05d20b1 100644 --- a/src/NHibernate/Type/UInt64Type.cs +++ b/src/NHibernate/Type/UInt64Type.cs @@ -16,7 +16,7 @@ namespace NHibernate.Type [Serializable] public partial class UInt64Type : PrimitiveType, IDiscriminatorType, IVersionType { - private static readonly object ZeroObject = (UInt64) 0; + private static readonly object ZeroObject = 0UL; /// public UInt64Type() : base(SqlTypeFactory.UInt64)