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