From: <fab...@us...> - 2011-03-30 22:25:32
|
Revision: 5570 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5570&view=rev Author: fabiomaulo Date: 2011-03-30 22:25:25 +0000 (Wed, 30 Mar 2011) Log Message: ----------- Fix NH-2610 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-30 01:50:31 UTC (rev 5569) +++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-30 22:25:25 UTC (rev 5570) @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Data.Common; using System.Diagnostics; using Iesi.Collections; using Iesi.Collections.Generic; @@ -8,6 +9,7 @@ using NHibernate.Criterion; using NHibernate.Driver; using NHibernate.Engine; +using NHibernate.Exceptions; using NHibernate.Loader.Criteria; using NHibernate.SqlCommand; using NHibernate.Transform; @@ -189,13 +191,13 @@ } int rowCount = 0; - using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null)) + try { - ArrayList[] hydratedObjects = new ArrayList[loaders.Count]; - List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count]; - bool[] createSubselects = new bool[loaders.Count]; - try + using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null)) { + ArrayList[] hydratedObjects = new ArrayList[loaders.Count]; + List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count]; + bool[] createSubselects = new bool[loaders.Count]; for (int i = 0; i < loaders.Count; i++) { CriteriaLoader loader = loaders[i]; @@ -217,7 +219,7 @@ createSubselects[i] = loader.IsSubselectLoadingEnabled; subselectResultKeys[i] = createSubselects[i] ? new List<EntityKey[]>() : null; int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue; - if (!dialect.SupportsLimitOffset || !NHibernate.Loader.Loader.UseLimit(selection, dialect)) + if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect)) { Loader.Loader.Advance(reader, selection); } @@ -228,7 +230,7 @@ object o = loader.GetRowFromResultSet(reader, session, queryParameters, loader.GetLockModes(queryParameters.LockModes), - null, hydratedObjects[i], keys, true); + null, hydratedObjects[i], keys, true); if (createSubselects[i]) { subselectResultKeys[i].Add(keys); @@ -239,24 +241,25 @@ results.Add(tmpResults); reader.NextResult(); } - } - catch (Exception e) - { - var message = string.Format("Failed to execute multi criteria: [{0}]", resultSetsCommand.Sql); - log.Error(message, e); - throw new HibernateException(message, e); - } - for (int i = 0; i < loaders.Count; i++) - { - CriteriaLoader loader = loaders[i]; - loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false); - if (createSubselects[i]) + for (int i = 0; i < loaders.Count; i++) { - loader.CreateSubselects(subselectResultKeys[i], parameters[i], session); + CriteriaLoader loader = loaders[i]; + loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false); + + if (createSubselects[i]) + { + loader.CreateSubselects(subselectResultKeys[i], parameters[i], session); + } } } } + catch (Exception sqle) + { + var message = string.Format("Failed to execute multi criteria: [{0}]", resultSetsCommand.Sql); + log.Error(message, sqle); + throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "Failed to execute multi criteria", resultSetsCommand.Sql); + } if (statsEnabled) { stopWatch.Stop(); Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-30 01:50:31 UTC (rev 5569) +++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-30 22:25:25 UTC (rev 5570) @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Data.Common; using System.Diagnostics; using System.Linq; using Iesi.Collections; @@ -9,6 +10,7 @@ using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Engine.Query.Sql; +using NHibernate.Exceptions; using NHibernate.Hql; using NHibernate.Loader.Custom; using NHibernate.Loader.Custom.Sql; @@ -508,9 +510,9 @@ List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[Translators.Count]; bool[] createSubselects = new bool[Translators.Count]; - using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null)) + try { - try + using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null)) { if (log.IsDebugEnabled) { @@ -521,13 +523,13 @@ ITranslator translator = Translators[i]; QueryParameters parameter = Parameters[i]; IList tempResults; - if (resultCollectionGenericType[i] == typeof (object)) + if (resultCollectionGenericType[i] == typeof(object)) { tempResults = new ArrayList(); } else { - tempResults = (IList) Activator.CreateInstance(typeof (List<>).MakeGenericType(resultCollectionGenericType[i])); + tempResults = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(resultCollectionGenericType[i])); } int entitySpan = translator.Loader.EntityPersisters.Length; hydratedObjects[i] = entitySpan > 0 ? new ArrayList() : null; @@ -564,13 +566,13 @@ object result = translator.Loader.GetRowFromResultSet(reader, - session, - parameter, - lockModeArray, - optionalObjectKey, - hydratedObjects[i], - keys, - true); + session, + parameter, + lockModeArray, + optionalObjectKey, + hydratedObjects[i], + keys, + true); tempResults.Add(result); @@ -595,27 +597,27 @@ reader.NextResult(); } - } - catch (Exception ex) - { - var message = string.Format("Failed to execute multi query: [{0}]", resultSetsCommand.Sql); - log.Error(message, ex); - throw new HibernateException(message, ex); - } - for (int i = 0; i < translators.Count; i++) - { - ITranslator translator = translators[i]; - QueryParameters parameter = parameters[i]; + for (int i = 0; i < translators.Count; i++) + { + ITranslator translator = translators[i]; + QueryParameters parameter = parameters[i]; - translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false); + translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false); - if (createSubselects[i]) - { - translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session); + if (createSubselects[i]) + { + translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session); + } } } } + catch (Exception sqle) + { + var message = string.Format("Failed to execute multi query: [{0}]", resultSetsCommand.Sql); + log.Error(message, sqle); + throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "Failed to execute multi query", resultSetsCommand.Sql); + } if (statsEnabled) { Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs 2011-03-30 22:25:25 UTC (rev 5570) @@ -0,0 +1,77 @@ +using NHibernate.Cfg; +using NHibernate.Cfg.Loquacious; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery +{ + [TestFixture] + public class Fixture : BugTestCase + { + private const string hqlQuery = "select a.Id from ClassA a"; + + protected override void Configure(Configuration configuration) + { + configuration.DataBaseIntegration(x => x.ExceptionConverter<SqlConverter>()); + } + + [Test] + public void NormalHqlShouldThrowUserException() + { + using(var s = OpenSession()) + { + using(s.BeginTransaction()) + { + s.Connection.Close(); + Assert.Throws<UnitTestException>(() => + s.CreateQuery(hqlQuery).List()); + } + } + } + + [Test] + public void MultiHqlShouldThrowUserException() + { + using (var s = OpenSession()) + { + using (s.BeginTransaction()) + { + var multi = s.CreateMultiQuery(); + multi.Add(hqlQuery); + s.Connection.Close(); + Assert.Throws<UnitTestException>(() => + multi.List()); + } + } + } + + [Test] + public void NormalCriteriaShouldThrowUserException() + { + using (var s = OpenSession()) + { + using (s.BeginTransaction()) + { + s.Connection.Close(); + Assert.Throws<UnitTestException>(() => + s.CreateCriteria(typeof(ClassA)).List()); + } + } + } + + [Test] + public void MultiCriteriaShouldThrowUserException() + { + using (var s = OpenSession()) + { + using (s.BeginTransaction()) + { + var multi = s.CreateMultiCriteria(); + multi.Add(s.CreateCriteria(typeof (ClassA))); + s.Connection.Close(); + Assert.Throws<UnitTestException>(() => + multi.List()); + } + } + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml 2011-03-30 22:25:25 UTC (rev 5570) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery" + assembly="NHibernate.Test"> + + <class name="ClassA"> + <id name="Id"> + <generator class="native"/> + </id> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs 2011-03-30 22:25:25 UTC (rev 5570) @@ -0,0 +1,7 @@ +namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery +{ + public class ClassA + { + public virtual int Id { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs 2011-03-30 22:25:25 UTC (rev 5570) @@ -0,0 +1,15 @@ +using System; +using NHibernate.Exceptions; + +namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery +{ + public class SqlConverter : ISQLExceptionConverter + { + public Exception Convert(AdoExceptionContextInfo adoExceptionContextInfo) + { + return new UnitTestException(); + } + } + + public class UnitTestException : Exception{} +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-30 01:50:31 UTC (rev 5569) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-30 22:25:25 UTC (rev 5570) @@ -677,6 +677,9 @@ <Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" /> <Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" /> <Compile Include="NHSpecificTest\Properties\Model.cs" /> + <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Fixture.cs" /> + <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Model.cs" /> + <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\SqlConverter.cs" /> <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> <Compile Include="PropertyTest\FieldCamelCaseMUnderscoreFixture.cs" /> @@ -2500,6 +2503,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\SqlConverterAndMultiQuery\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2489\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2603\Mappings.hbm.xml" /> <EmbeddedResource Include="Subselect\Beings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |