From 35637c627f3b4197a16b6d973ffd3cb2cbd16d0d Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Mon, 9 May 2022 21:19:37 +1200 Subject: [PATCH 1/2] Let Npgsql 6 decide how to handle DateTime parameters --- src/NHibernate.Test/NHibernate.Test.csproj | 2 +- src/NHibernate/Driver/NpgsqlDriver.cs | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index 978afb580f2..b4e6385742d 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -63,7 +63,7 @@ - + diff --git a/src/NHibernate/Driver/NpgsqlDriver.cs b/src/NHibernate/Driver/NpgsqlDriver.cs index ccfd2dc1be2..c638e256221 100644 --- a/src/NHibernate/Driver/NpgsqlDriver.cs +++ b/src/NHibernate/Driver/NpgsqlDriver.cs @@ -65,19 +65,33 @@ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplement protected override void InitializeParameter(DbParameter dbParam, string name, SqlTypes.SqlType sqlType) { - base.InitializeParameter(dbParam, name, sqlType); + if (sqlType == null) + throw new QueryException($"No type assigned to parameter '{name}'"); - // Since the .NET currency type has 4 decimal places, we use a decimal type in PostgreSQL instead of its native 2 decimal currency type. + dbParam.ParameterName = FormatNameForParameter(name); if (sqlType.DbType == DbType.Currency) + { + // Since the .NET currency type has 4 decimal places, we use a decimal type in PostgreSQL instead of its native 2 decimal currency type. dbParam.DbType = DbType.Decimal; + } + else if (DriverVersionMajor < 6 || sqlType.DbType != DbType.DateTime) + { + dbParam.DbType = sqlType.DbType; + } + else + { + // Let Npgsql 6 driver to decide parameter type + } } // Prior to v3, Npgsql was expecting DateTime for time. // https://github.com/npgsql/npgsql/issues/347 - public override bool RequiresTimeSpanForTime => (DriverVersion?.Major ?? 3) >= 3; + public override bool RequiresTimeSpanForTime => DriverVersionMajor >= 3; public override bool HasDelayedDistributedTransactionCompletion => true; System.Type IEmbeddedBatcherFactoryProvider.BatcherFactoryClass => typeof(GenericBatchingBatcherFactory); + + private int DriverVersionMajor => DriverVersion?.Major ?? 3; } } From 8f20649d9538a1633d1eeb1f86638fd18e35be31 Mon Sep 17 00:00:00 2001 From: Alex Zaytsev Date: Wed, 11 May 2022 04:57:48 +0000 Subject: [PATCH 2/2] Update NHibernate.Test.csproj npgsql does not support .net core 2.1 --- src/NHibernate.Test/NHibernate.Test.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index b4e6385742d..978afb580f2 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -63,7 +63,7 @@ - +