|
From: <fab...@us...> - 2010-08-14 17:37:19
|
Revision: 5144
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5144&view=rev
Author: fabiomaulo
Date: 2010-08-14 17:37:12 +0000 (Sat, 14 Aug 2010)
Log Message:
-----------
Refactoring of ReflectionBasedDriver in order to use DbProviderFactories
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Driver/ReflectionBasedDriver.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/DriverTest/ReflectionBasedDriverTest.cs
Modified: trunk/nhibernate/src/NHibernate/Driver/ReflectionBasedDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/ReflectionBasedDriver.cs 2010-08-14 16:58:49 UTC (rev 5143)
+++ trunk/nhibernate/src/NHibernate/Driver/ReflectionBasedDriver.cs 2010-08-14 17:37:12 UTC (rev 5144)
@@ -1,4 +1,5 @@
using System.Data;
+using System.Data.Common;
using NHibernate.Util;
namespace NHibernate.Driver
@@ -20,16 +21,38 @@
/// <param name="connectionTypeName">Connection type name.</param>
/// <param name="commandTypeName">Command type name.</param>
protected ReflectionBasedDriver(string driverAssemblyName, string connectionTypeName, string commandTypeName)
+ : this(null, driverAssemblyName, connectionTypeName, commandTypeName)
{
+ }
+
+ /// <summary>
+ /// Initializes a new instance of <see cref="ReflectionBasedDriver" /> with
+ /// type names that are loaded from the specified assembly.
+ /// </summary>
+ /// <param name="providerInvariantName">The Invariant name of a provider.</param>
+ /// <param name="driverAssemblyName">Assembly to load the types from.</param>
+ /// <param name="connectionTypeName">Connection type name.</param>
+ /// <param name="commandTypeName">Command type name.</param>
+ /// <seealso cref="DbProviderFactories.GetFactory(string)"/>
+ protected ReflectionBasedDriver(string providerInvariantName, string driverAssemblyName, string connectionTypeName, string commandTypeName)
+ {
// Try to get the types from an already loaded assembly
var connectionType = ReflectHelper.TypeFromAssembly(connectionTypeName, driverAssemblyName, false);
var commandType = ReflectHelper.TypeFromAssembly(commandTypeName, driverAssemblyName, false);
if (connectionType == null || commandType == null)
{
- throw new HibernateException(string.Format(ReflectionTypedProviderExceptionMessageTemplate, driverAssemblyName));
+ if (string.IsNullOrEmpty(providerInvariantName))
+ {
+ throw new HibernateException(string.Format(ReflectionTypedProviderExceptionMessageTemplate, driverAssemblyName));
+ }
+ var factory = DbProviderFactories.GetFactory(providerInvariantName);
+ connectionCommandProvider = new DbProviderFactoryDriveConnectionCommandProvider(factory);
}
- connectionCommandProvider = new ReflectionDriveConnectionCommandProvider(connectionType, commandType);
+ else
+ {
+ connectionCommandProvider = new ReflectionDriveConnectionCommandProvider(connectionType, commandType);
+ }
}
public override IDbConnection CreateConnection()
Added: trunk/nhibernate/src/NHibernate.Test/DriverTest/ReflectionBasedDriverTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/DriverTest/ReflectionBasedDriverTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/DriverTest/ReflectionBasedDriverTest.cs 2010-08-14 17:37:12 UTC (rev 5144)
@@ -0,0 +1,118 @@
+using System;
+using NHibernate.Driver;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.DriverTest
+{
+ public class ReflectionBasedDriverTest
+ {
+ private class MyDriverWithWrongClassesAndGoodDbProviderFactory : ReflectionBasedDriver
+ {
+ public MyDriverWithWrongClassesAndGoodDbProviderFactory()
+ : base("System.Data.OracleClient", "pizza1", "pizza2", "pizza3")
+ {
+ }
+ public MyDriverWithWrongClassesAndGoodDbProviderFactory(string assemblyName)
+ : base("System.Data.OracleClient", assemblyName, "pizza2", "pizza3")
+ {
+ }
+
+ public override bool UseNamedPrefixInSql
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public override bool UseNamedPrefixInParameter
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public override string NamedPrefix
+ {
+ get { throw new NotImplementedException(); }
+ }
+ }
+ private class MyDriverWithNoDbProviderFactory : ReflectionBasedDriver
+ {
+ public MyDriverWithNoDbProviderFactory():
+ base(null,
+ "System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
+ "System.Data.OracleClient.OracleConnection",
+ "System.Data.OracleClient.OracleCommand") { }
+
+ public override bool UseNamedPrefixInSql
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public override bool UseNamedPrefixInParameter
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public override string NamedPrefix
+ {
+ get { throw new NotImplementedException(); }
+ }
+ }
+
+ [Test]
+ public void WhenCreatedWithGoodDbProviderThenNotThrows()
+ {
+ Executing.This(()=> new MyDriverWithWrongClassesAndGoodDbProviderFactory()).Should().NotThrow();
+ }
+
+ [Test]
+ public void WhenCreatedWithNullAssemblyAndGoodDbProviderThenNotThrows()
+ {
+ Executing.This(() => new MyDriverWithWrongClassesAndGoodDbProviderFactory(null)).Should().NotThrow();
+ }
+
+ [Test]
+ public void WhenCreatedWithDbFactoryThenCanReturnConnection()
+ {
+ var provider = new MyDriverWithWrongClassesAndGoodDbProviderFactory();
+ using (var connection = provider.CreateConnection())
+ {
+ connection.Should().Not.Be.Null();
+ }
+ }
+
+ [Test]
+ public void WhenCreatedWithDbFactoryThenCanReturnCommand()
+ {
+ var provider = new MyDriverWithWrongClassesAndGoodDbProviderFactory();
+ using (var command = provider.CreateCommand())
+ {
+ command.Should().Not.Be.Null();
+ }
+ }
+
+ [Test]
+ public void WhenCreatedWithNoDbProviderThenNotThrows()
+ {
+ Executing.This(() => new MyDriverWithNoDbProviderFactory()).Should().NotThrow();
+ }
+
+ [Test]
+ public void WhenCreatedWithNoDbFactoryThenCanReturnConnection()
+ {
+ var provider = new MyDriverWithNoDbProviderFactory();
+ using (var connection = provider.CreateConnection())
+ {
+ connection.Should().Not.Be.Null();
+ }
+ }
+
+ [Test]
+ public void WhenCreatedNoWithDbFactoryThenCanReturnCommand()
+ {
+ var provider = new MyDriverWithNoDbProviderFactory();
+ using (var command = provider.CreateCommand())
+ {
+ command.Should().Not.Be.Null();
+ }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-08-14 16:58:49 UTC (rev 5143)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-08-14 17:37:12 UTC (rev 5144)
@@ -182,6 +182,7 @@
<Compile Include="Criteria\Reptile.cs" />
<Compile Include="DialectTest\MsSqlCe40DialectFixture.cs" />
<Compile Include="DriverTest\DbProviderFactoryDriveConnectionCommandProviderTest.cs" />
+ <Compile Include="DriverTest\ReflectionBasedDriverTest.cs" />
<Compile Include="DriverTest\Sql2008DateTime2Test.cs" />
<Compile Include="DriverTest\SqlClientDriverFixture.cs" />
<Compile Include="DriverTest\SqlServerCeDriverFixture.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|