diff --git a/src/NHibernate/AdoNet/FirebirdDbDataReader.cs b/src/NHibernate/AdoNet/FirebirdDbDataReader.cs new file mode 100644 index 0000000000..9ff2940b85 --- /dev/null +++ b/src/NHibernate/AdoNet/FirebirdDbDataReader.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NHibernate.Id.Insert; + +namespace NHibernate.AdoNet +{ + public class FirebirdDbDataReader : DbDataReaderWrapper + { + public FirebirdDbDataReader(DbDataReader reader) : base(reader) { } + + public override DateTime GetDateTime(int ordinal) + { + var value = DataReader[ordinal]; + + return value switch + { + string s => DateTime.Parse(s, CultureInfo.InvariantCulture), + _ => (DateTime) value + }; + } + } +} diff --git a/src/NHibernate/Async/Driver/FirebirdClientDriver.cs b/src/NHibernate/Async/Driver/FirebirdClientDriver.cs new file mode 100644 index 0000000000..86ad67e1ba --- /dev/null +++ b/src/NHibernate/Async/Driver/FirebirdClientDriver.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// 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; +using System.Data.Common; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; +using NHibernate.AdoNet; +using NHibernate.Dialect; +using NHibernate.SqlCommand; +using NHibernate.SqlTypes; +using NHibernate.Util; +using Environment = NHibernate.Cfg.Environment; + +namespace NHibernate.Driver +{ + using System.Threading.Tasks; + using System.Threading; + public partial class FirebirdClientDriver : ReflectionBasedDriver + { + + public override async Task ExecuteReaderAsync(DbCommand command, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + var reader = await (command.ExecuteReaderAsync(cancellationToken)).ConfigureAwait(false); + + return new FirebirdDbDataReader(reader); + } + } +} diff --git a/src/NHibernate/Driver/FirebirdClientDriver.cs b/src/NHibernate/Driver/FirebirdClientDriver.cs index e2859880ad..6b67e567da 100644 --- a/src/NHibernate/Driver/FirebirdClientDriver.cs +++ b/src/NHibernate/Driver/FirebirdClientDriver.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Reflection; using System.Text.RegularExpressions; +using NHibernate.AdoNet; using NHibernate.Dialect; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -17,7 +18,7 @@ namespace NHibernate.Driver /// A NHibernate Driver for using the Firebird data provider located in /// FirebirdSql.Data.FirebirdClient assembly. /// - public class FirebirdClientDriver : ReflectionBasedDriver + public partial class FirebirdClientDriver : ReflectionBasedDriver { private const string SELECT_CLAUSE_EXP = @"(?<=\bselect\b|\bwhere\b).*"; private const string CAST_PARAMS_EXP = @@ -212,5 +213,12 @@ public void ClearPool(string connectionString) /// See http://tracker.firebirdsql.org/browse/DNET-766. /// public override bool SupportsEnlistmentWhenAutoEnlistmentIsDisabled => false; + + public override DbDataReader ExecuteReader(DbCommand command) + { + var reader = command.ExecuteReader(); + + return new FirebirdDbDataReader(reader); + } } }