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. |