From 6a6ff055ff02817e68e0ee1306657b5d2e012dcf Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Sun, 26 Feb 2023 18:26:20 -0800 Subject: [PATCH 1/3] Upgrade to SqlClient 5.1.0 with DateOnly/TimeOnly support --- Extensions/TestCommon/TestCommon.csproj | 2 +- .../Xtensive.Orm.Reprocessing.csproj | 2 +- .../Xtensive.Orm.Security/Xtensive.Orm.Security.csproj | 2 +- .../Xtensive.Orm.Tracking/Xtensive.Orm.Tracking.csproj | 2 +- Extensions/Xtensive.Orm.Web/Xtensive.Orm.Web.csproj | 2 +- Orm/Xtensive.Orm.SqlServer/Xtensive.Orm.SqlServer.csproj | 2 +- Orm/Xtensive.Orm.Tests/Xtensive.Orm.Tests.csproj | 2 +- Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs | 8 ++++---- Orm/Xtensive.Orm/Xtensive.Orm.csproj | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Extensions/TestCommon/TestCommon.csproj b/Extensions/TestCommon/TestCommon.csproj index f19fa46dd6..e23f0c4aef 100644 --- a/Extensions/TestCommon/TestCommon.csproj +++ b/Extensions/TestCommon/TestCommon.csproj @@ -12,7 +12,7 @@ - + diff --git a/Extensions/Xtensive.Orm.Reprocessing/Xtensive.Orm.Reprocessing.csproj b/Extensions/Xtensive.Orm.Reprocessing/Xtensive.Orm.Reprocessing.csproj index ab1e779974..34ee5d125c 100644 --- a/Extensions/Xtensive.Orm.Reprocessing/Xtensive.Orm.Reprocessing.csproj +++ b/Extensions/Xtensive.Orm.Reprocessing/Xtensive.Orm.Reprocessing.csproj @@ -16,7 +16,7 @@ - + diff --git a/Extensions/Xtensive.Orm.Security/Xtensive.Orm.Security.csproj b/Extensions/Xtensive.Orm.Security/Xtensive.Orm.Security.csproj index 686f6bf4ac..8643bbdc08 100644 --- a/Extensions/Xtensive.Orm.Security/Xtensive.Orm.Security.csproj +++ b/Extensions/Xtensive.Orm.Security/Xtensive.Orm.Security.csproj @@ -17,7 +17,7 @@ - + diff --git a/Extensions/Xtensive.Orm.Tracking/Xtensive.Orm.Tracking.csproj b/Extensions/Xtensive.Orm.Tracking/Xtensive.Orm.Tracking.csproj index b69fff4349..3c18a0e846 100644 --- a/Extensions/Xtensive.Orm.Tracking/Xtensive.Orm.Tracking.csproj +++ b/Extensions/Xtensive.Orm.Tracking/Xtensive.Orm.Tracking.csproj @@ -16,7 +16,7 @@ - + diff --git a/Extensions/Xtensive.Orm.Web/Xtensive.Orm.Web.csproj b/Extensions/Xtensive.Orm.Web/Xtensive.Orm.Web.csproj index d4d5c4299e..a919cdb476 100644 --- a/Extensions/Xtensive.Orm.Web/Xtensive.Orm.Web.csproj +++ b/Extensions/Xtensive.Orm.Web/Xtensive.Orm.Web.csproj @@ -19,7 +19,7 @@ - + diff --git a/Orm/Xtensive.Orm.SqlServer/Xtensive.Orm.SqlServer.csproj b/Orm/Xtensive.Orm.SqlServer/Xtensive.Orm.SqlServer.csproj index cebd795bca..c9b18b906f 100644 --- a/Orm/Xtensive.Orm.SqlServer/Xtensive.Orm.SqlServer.csproj +++ b/Orm/Xtensive.Orm.SqlServer/Xtensive.Orm.SqlServer.csproj @@ -16,7 +16,7 @@ 2 - + diff --git a/Orm/Xtensive.Orm.Tests/Xtensive.Orm.Tests.csproj b/Orm/Xtensive.Orm.Tests/Xtensive.Orm.Tests.csproj index 2631363597..ed55956c3b 100644 --- a/Orm/Xtensive.Orm.Tests/Xtensive.Orm.Tests.csproj +++ b/Orm/Xtensive.Orm.Tests/Xtensive.Orm.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs index 347e8facc4..46fe180517 100644 --- a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs +++ b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs @@ -136,13 +136,13 @@ public virtual void BindDateTime(DbParameter parameter, object value) public virtual void BindDateOnly(DbParameter parameter, object value) { parameter.DbType = DbType.Date; - parameter.Value = value != null ? ((DateOnly) value).ToDateTime(TimeOnly.MinValue) : DBNull.Value; + parameter.Value = value != null ? (DateOnly) value : DBNull.Value; } public virtual void BindTimeOnly(DbParameter parameter, object value) { parameter.DbType = DbType.Time; - parameter.Value = value != null ? ((TimeOnly) value).ToTimeSpan() : DBNull.Value; + parameter.Value = value != null ? (TimeOnly) value : DBNull.Value; } #endif @@ -226,10 +226,10 @@ public virtual object ReadDateTime(DbDataReader reader, int index) => #if NET6_0_OR_GREATER //DO_DATEONLY public virtual object ReadDateOnly(DbDataReader reader, int index) => - DateOnly.FromDateTime(reader.GetFieldValue(index)); + reader.GetFieldValue(index); public virtual object ReadTimeOnly(DbDataReader reader, int index) => - TimeOnly.FromTimeSpan(reader.GetFieldValue(index)); + reader.GetFieldValue(index); #endif public virtual object ReadDateTimeOffset(DbDataReader reader, int index) => diff --git a/Orm/Xtensive.Orm/Xtensive.Orm.csproj b/Orm/Xtensive.Orm/Xtensive.Orm.csproj index e71484bead..ce9d4f62f6 100644 --- a/Orm/Xtensive.Orm/Xtensive.Orm.csproj +++ b/Orm/Xtensive.Orm/Xtensive.Orm.csproj @@ -50,7 +50,7 @@ - + From 921490a3c0c96a833f8f05b6c03aeab3b821f948 Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 6 Mar 2023 21:09:19 -0800 Subject: [PATCH 2/3] Override Bind/Read in SqlServer's TypeMapper only --- .../Sql.Drivers.SqlServer/v09/TypeMapper.cs | 20 +++++++++++++++++++ .../Sql/ValueTypeMapping/TypeMapper.cs | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/TypeMapper.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/TypeMapper.cs index b998c4dbe2..7163974dcf 100644 --- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/TypeMapper.cs +++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/TypeMapper.cs @@ -80,6 +80,26 @@ public override void BindString(DbParameter parameter, object value) : NVarCharMaxLength; } +#if NET6_0_OR_GREATER + public override void BindDateOnly(DbParameter parameter, object value) + { + parameter.DbType = DbType.Date; + parameter.Value = value != null ? (DateOnly) value : DBNull.Value; + } + + public override void BindTimeOnly(DbParameter parameter, object value) + { + parameter.DbType = DbType.Time; + parameter.Value = value != null ? (TimeOnly) value : DBNull.Value; + } + + public override object ReadDateOnly(DbDataReader reader, int index) => + reader.GetFieldValue(index); + + public override object ReadTimeOnly(DbDataReader reader, int index) => + reader.GetFieldValue(index); +#endif + public override SqlValueType MapSByte(int? length, int? precision, int? scale) { return new SqlValueType(SqlType.Int16); diff --git a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs index c12df4a31e..12ba1545cc 100644 --- a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs +++ b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs @@ -136,13 +136,13 @@ public virtual void BindDateTime(DbParameter parameter, object value) public virtual void BindDateOnly(DbParameter parameter, object value) { parameter.DbType = DbType.Date; - parameter.Value = value != null ? (DateOnly) value : DBNull.Value; + parameter.Value = value != null ? ((DateOnly) value).ToDateTime(TimeOnly.MinValue) : DBNull.Value; } public virtual void BindTimeOnly(DbParameter parameter, object value) { parameter.DbType = DbType.Time; - parameter.Value = value != null ? (TimeOnly) value : DBNull.Value; + parameter.Value = value != null ? ((TimeOnly) value).ToTimeSpan() : DBNull.Value; } #endif @@ -226,10 +226,10 @@ public virtual object ReadDateTime(DbDataReader reader, int index) => #if NET6_0_OR_GREATER public virtual object ReadDateOnly(DbDataReader reader, int index) => - reader.GetFieldValue(index); + DateOnly.FromDateTime(reader.GetFieldValue(index)); public virtual object ReadTimeOnly(DbDataReader reader, int index) => - reader.GetFieldValue(index); + TimeOnly.FromTimeSpan(reader.GetFieldValue(index)); #endif public virtual object ReadDateTimeOffset(DbDataReader reader, int index) => From 0c90eed9ef459a391801c86facde402447ea260b Mon Sep 17 00:00:00 2001 From: Sergei Pavlov Date: Mon, 6 Mar 2023 21:11:41 -0800 Subject: [PATCH 3/3] Fix formatting --- .../Sql/ValueTypeMapping/TypeMapper.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs index 12ba1545cc..f95ea9b57c 100644 --- a/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs +++ b/Orm/Xtensive.Orm/Sql/ValueTypeMapping/TypeMapper.cs @@ -46,12 +46,12 @@ public virtual void BindBoolean(DbParameter parameter, object value) public virtual void BindChar(DbParameter parameter, object value) { parameter.DbType = DbType.String; - if (value==null) { + if (value == null) { parameter.Value = DBNull.Value; return; } var _char = (char) value; - parameter.Value = _char==default(char) ? string.Empty : _char.ToString(); + parameter.Value = _char == default(char) ? string.Empty : _char.ToString(); } public virtual void BindString(DbParameter parameter, object value) @@ -155,7 +155,7 @@ public virtual void BindDateTimeOffset(DbParameter parameter, object value) public virtual void BindTimeSpan(DbParameter parameter, object value) { parameter.DbType = DbType.Int64; - if (value!=null) { + if (value != null) { var timeSpan = ValueRangeValidator.Correct((TimeSpan) value, Int64TimeSpanRange); parameter.Value = timeSpan.Ticks * 100; } @@ -311,9 +311,9 @@ public virtual SqlValueType MapDouble(int? length, int? precision, int? scale) = public virtual SqlValueType MapDecimal(int? length, int? precision, int? scale) { - if (MaxDecimalPrecision==null) + if (MaxDecimalPrecision == null) return new SqlValueType(SqlType.Decimal); - if (precision==null) { + if (precision == null) { var resultPrecision = Math.Min(DecimalPrecisionLimit, MaxDecimalPrecision.Value); var resultScale = resultPrecision / 2; return new SqlValueType(SqlType.Decimal, resultPrecision, resultScale); @@ -352,9 +352,9 @@ public virtual SqlValueType MapByteArray(int? length, int? precision, int? scale protected static SqlValueType ChooseStreamType(SqlType varType, SqlType varMaxType, int? length, int? varTypeMaxLength) { - if (varTypeMaxLength==null) + if (varTypeMaxLength == null) return new SqlValueType(varMaxType); - if (length==null) + if (length == null) return new SqlValueType(varType, varTypeMaxLength.Value); if (length.Value > varTypeMaxLength.Value) return new SqlValueType(varMaxType); @@ -367,13 +367,13 @@ protected static SqlValueType ChooseStreamType(SqlType varType, SqlType varMaxTy public virtual void Initialize() { var varchar = Driver.ServerInfo.DataTypes.VarChar; - if (varchar!=null) + if (varchar != null) VarCharMaxLength = varchar.MaxLength; var varbinary = Driver.ServerInfo.DataTypes.VarBinary; - if (varbinary!=null) + if (varbinary != null) VarBinaryMaxLength = varbinary.MaxLength; var _decimal = Driver.ServerInfo.DataTypes.Decimal; - if (_decimal!=null) + if (_decimal != null) MaxDecimalPrecision = _decimal.MaxPrecision; }