From 5815f0618f6a46e7148c5c404a961a939d89975f Mon Sep 17 00:00:00 2001 From: markpollack Date: Thu, 7 Aug 2008 20:34:46 +0000 Subject: [PATCH] SPRNET-994 - Null reference in SessionFactoryUtils.GetDbProvider Side effect introduced fixing SPRNET-986. Updated vs.net 2003 solution Thanks to Roberto Paterlini and Marko Lahma --- Spring.Net.2003.sln | 12 --- .../Spring.Core/Spring.Core.2003.csproj | 40 ++++++++++ .../Data/NHibernate/SessionFactoryUtils.cs | 11 +-- .../Spring.Data.NHibernate.2003.csproj | 12 +-- .../Data/NHibernate/SessionFactoryUtils.cs | 7 +- .../Spring.Data.NHibernate12.2003.csproj | 2 +- .../Spring.Data/Data/Common/dbproviders.xml | 16 ++-- .../Spring.Core.Tests.2003.csproj | 10 +++ .../NHibernate/SessionFactoryUtilsTests.cs | 75 +++++++++++++++++++ .../Spring.Data.NHibernate.Tests.2003.csproj | 17 ++++- .../Spring.Data.NHibernate.Tests.2005.csproj | 3 +- .../Spring.Data.NHibernate.Tests.2008.csproj | 3 +- .../Spring.Web.Tests.2003.csproj | 2 +- 13 files changed, 167 insertions(+), 43 deletions(-) create mode 100644 test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/SessionFactoryUtilsTests.cs diff --git a/Spring.Net.2003.sln b/Spring.Net.2003.sln index 3354399d..36d79b68 100644 --- a/Spring.Net.2003.sln +++ b/Spring.Net.2003.sln @@ -51,10 +51,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Data.NHibernate.2003 ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Data.NHibernate.Integration.Tests.2003", "test\Spring\Spring.Data.NHibernate.Integration.Tests\Spring.Data.NHibernate.Integration.Tests.2003.csproj", "{8DA67FF2-C473-4329-8FF6-3747182196D7}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Data.NHibernate.Tests.2003", "test\Spring\Spring.Data.NHibernate.Tests\Spring.Data.NHibernate.Tests.2003.csproj", "{8755D942-7828-4971-835B-37A5992C06C9}" ProjectSection(ProjectDependencies) = postProject EndProjectSection @@ -185,14 +181,6 @@ Global {E8467024-8AE3-44A4-BAAD-1D78747EC7BD}.Release.Build.0 = Release-1.1|.NET {E8467024-8AE3-44A4-BAAD-1D78747EC7BD}.Release-1.1.ActiveCfg = Release-1.1|.NET {E8467024-8AE3-44A4-BAAD-1D78747EC7BD}.Release-1.1.Build.0 = Release-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Debug.ActiveCfg = Debug-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Debug.Build.0 = Debug-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Debug-1.1.ActiveCfg = Debug-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Debug-1.1.Build.0 = Debug-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Release.ActiveCfg = Release-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Release.Build.0 = Release-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Release-1.1.ActiveCfg = Release-1.1|.NET - {8DA67FF2-C473-4329-8FF6-3747182196D7}.Release-1.1.Build.0 = Release-1.1|.NET {8755D942-7828-4971-835B-37A5992C06C9}.Debug.ActiveCfg = Debug-1.1|.NET {8755D942-7828-4971-835B-37A5992C06C9}.Debug.Build.0 = Debug-1.1|.NET {8755D942-7828-4971-835B-37A5992C06C9}.Debug-1.1.ActiveCfg = Debug-1.1|.NET diff --git a/src/Spring/Spring.Core/Spring.Core.2003.csproj b/src/Spring/Spring.Core/Spring.Core.2003.csproj index 125c2e2c..da583575 100644 --- a/src/Spring/Spring.Core/Spring.Core.2003.csproj +++ b/src/Spring/Spring.Core/Spring.Core.2003.csproj @@ -292,6 +292,11 @@ SubType = "Code" BuildAction = "Compile" /> + + + + + + + + @@ -109,11 +109,6 @@ AssemblyName = "antlr.runtime" HintPath = "..\..\..\lib\Net\1.1\antlr.runtime.dll" /> - + diff --git a/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/SessionFactoryUtils.cs b/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/SessionFactoryUtils.cs index 0e13824b..e14fd451 100644 --- a/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/SessionFactoryUtils.cs +++ b/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/SessionFactoryUtils.cs @@ -662,7 +662,6 @@ namespace Spring.Data.NHibernate if (db != null) { Type hibCommandType = db.CreateCommand().GetType(); - //Type hibConnectionType = cp.Driver.ConnectionType; string[] providerNames = ctx.GetObjectNamesForType(typeof(DbProvider), true, false); string hibCommandAQN = hibCommandType.AssemblyQualifiedName; @@ -671,12 +670,10 @@ namespace Spring.Data.NHibernate IObjectDefinition objectdef = ctx.ObjectFactory.GetObjectDefinition(providerName); ConstructorArgumentValues ctorArgs = objectdef.ConstructorArgumentValues; ConstructorArgumentValues.ValueHolder vh = ctorArgs.NamedArgumentValues["dbmetadata"] as ConstructorArgumentValues.ValueHolder; - IObjectDefinition od = vh.Value as IObjectDefinition; + IObjectDefinition od = ((ObjectDefinitionHolder)vh.Value).ObjectDefinition; ConstructorArgumentValues dbmdCtorArgs = od.ConstructorArgumentValues; string commandType = dbmdCtorArgs.GetArgumentValue("commandType", typeof(string)).Value as string; - string assemblyName = dbmdCtorArgs.GetArgumentValue("assemblyName", typeof(string)).Value as string; - - + if (hibCommandAQN.Equals(commandType)) { IDbProvider prov = Spring.Data.Common.DbProviderFactory.GetDbProvider(providerName); diff --git a/src/Spring/Spring.Data.NHibernate12/Spring.Data.NHibernate12.2003.csproj b/src/Spring/Spring.Data.NHibernate12/Spring.Data.NHibernate12.2003.csproj index e65acf0d..11c6f80b 100644 --- a/src/Spring/Spring.Data.NHibernate12/Spring.Data.NHibernate12.2003.csproj +++ b/src/Spring/Spring.Data.NHibernate12/Spring.Data.NHibernate12.2003.csproj @@ -3,7 +3,7 @@ ProjectType = "Local" ProductVersion = "7.10.6030" SchemaVersion = "2.0" - ProjectGuid = "{2E12AE3E-5690-46A5-9F89-80F1D3004ADB}" + ProjectGuid = "{B573D2EF-56FD-4675-9031-F8057119B3C8}" > - - - - - - + + + + + + - + - + diff --git a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj index 2db53490..50de97dc 100644 --- a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj +++ b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2003.csproj @@ -1474,6 +1474,11 @@ SubType = "Code" BuildAction = "Compile" /> + + + /// This class contains tests for SessionFactoryUtilsTest + /// + /// Marko Lahma + [TestFixture] + public class SessionFactoryUtilsTests + { + [Test] + public void SessionFactoryUtilsWithGetDbProvider() + { + MockRepository mockery = new MockRepository(); + ISessionFactoryImplementor sessionFactory = (ISessionFactoryImplementor) mockery.CreateMultiMock(typeof(ISessionFactory), typeof(ISessionFactoryImplementor)); + + IDriver driver = (IDriver)mockery.DynamicMock(typeof(IDriver)); + Expect.Call(driver.CreateCommand()).Repeat.AtLeastOnce().Return(new SqlCommand()); + + IConnectionProvider cp = (IConnectionProvider) mockery.DynamicMock(typeof (IConnectionProvider)); + Expect.Call(cp.Driver).Repeat.AtLeastOnce().Return(driver); + + Expect.Call(sessionFactory.ConnectionProvider).Repeat.AtLeastOnce().Return(cp); + + mockery.ReplayAll(); + IDbProvider provider = SessionFactoryUtils.GetDbProvider(sessionFactory); + + Assert.AreEqual(typeof(SqlCommand), provider.DbMetadata.CommandType); + + mockery.VerifyAll(); + } + + } + + +} diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2003.csproj b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2003.csproj index 571fac78..a662e23d 100644 --- a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2003.csproj +++ b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2003.csproj @@ -1,7 +1,7 @@ @@ -147,6 +147,11 @@ RelPath = "Spring.Data.NHibernate.Tests.dll.config" BuildAction = "None" /> + + + + @@ -120,4 +121,4 @@ xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q /d xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q - \ No newline at end of file + diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2008.csproj b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2008.csproj index 290aec97..a7acc2a0 100644 --- a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2008.csproj +++ b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2008.csproj @@ -85,6 +85,7 @@ + @@ -121,4 +122,4 @@ xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2008\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q /d xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2008\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q - \ No newline at end of file + diff --git a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2003.csproj b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2003.csproj index f6cc51f9..aae71692 100644 --- a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2003.csproj +++ b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2003.csproj @@ -291,7 +291,7 @@ />