Skip to content

Commit 9711f47

Browse files
David EllingsworthDavid Ellingsworth
authored andcommitted
GH-3530: Add a mechanism to override the default DbDataReader returned from executing a command.
1 parent ea33f7c commit 9711f47

File tree

5 files changed

+36
-2
lines changed

5 files changed

+36
-2
lines changed

src/NHibernate.Test/NHSpecificTest/GH1547/Fixture.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ DbConnection IDriver.CreateConnection()
184184
return _driverImplementation.CreateConnection();
185185
}
186186

187+
DbDataReader IDriver.ExecuteReader(DbCommand cmd)
188+
{
189+
return _driverImplementation.ExecuteReader(cmd);
190+
}
191+
187192
bool IDriver.SupportsMultipleOpenReaders => _driverImplementation.SupportsMultipleOpenReaders;
188193

189194
void IDriver.PrepareCommand(DbCommand command)

src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,11 @@ DbParameter IDriver.GenerateParameter(DbCommand command, string name, SqlType sq
601601
return param;
602602
}
603603

604+
DbDataReader IDriver.ExecuteReader(DbCommand cmd)
605+
{
606+
return _driverImplementation.ExecuteReader(cmd);
607+
}
608+
604609
#region Firebird mess
605610

606611
public void CleanUp()

src/NHibernate/AdoNet/AbstractBatcher.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,13 +252,16 @@ private DbDataReader DoExecuteReader(DbCommand cmd)
252252
{
253253
try
254254
{
255-
var reader = cmd.ExecuteReader();
255+
var driver = _factory.ConnectionProvider.Driver;
256+
var reader = driver.ExecuteReader(cmd);
257+
256258
if (reader == null)
257259
{
258260
// MySql may return null instead of an exception, by example when the query is canceled by another thread.
259261
throw new InvalidOperationException("The query execution has yielded a null reader. (Has it been canceled?)");
260262
}
261-
return _factory.ConnectionProvider.Driver.SupportsMultipleOpenReaders
263+
264+
return driver.SupportsMultipleOpenReaders
262265
? reader
263266
: NHybridDataReader.Create(reader);
264267
}

src/NHibernate/Driver/DriverBase.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,5 +361,17 @@ public DbParameter GenerateOutputParameter(DbCommand command)
361361
/// Get the timeout in seconds for ADO.NET queries.
362362
/// </summary>
363363
public virtual int CommandTimeout => commandTimeout;
364+
365+
/// <summary>
366+
/// Provides a mechanism to override the default DbDataReader used
367+
/// by a data provider. Some providers don't provide a DataReader
368+
/// that implement all of the methods.
369+
/// </summary>
370+
/// <param name="cmd">The command to execute.</param>
371+
/// <returns>A <see cref="DbDataReader">DbDataReader</see> object.</returns>
372+
public virtual DbDataReader ExecuteReader(DbCommand cmd)
373+
{
374+
return cmd.ExecuteReader();
375+
}
364376
}
365377
}

src/NHibernate/Driver/IDriver.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,14 @@ public interface IDriver
163163
/// The minimal date supplied as a <see cref="DateTime" /> supported by this driver.
164164
/// </summary>
165165
DateTime MinDate { get; }
166+
167+
/// <summary>
168+
/// Provides a mechanism to override the default DbDataReader used
169+
/// by a data provider. Some providers don't provide a DataReader
170+
/// that implement all of the methods.
171+
/// </summary>
172+
/// <param name="cmd">The command to execute.</param>
173+
/// <returns>A <see cref="DbDataReader">DbDataReader</see> object.</returns>
174+
DbDataReader ExecuteReader(DbCommand cmd);
166175
}
167176
}

0 commit comments

Comments
 (0)