"Index was outside the bounds of the array" error when executing cached query for single result with distinct results transformer

Description

I have an old codebase (using NHibernate and Castle ActiveRecord) that has been recently upgraded to the 3.2 GA release.

After the upgrade, the following style of queries now fail:

With this stack trace:

NHibernate.Exceptions.GenericADOException: Unable to perform find[SQL: SQL not available] ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
at NHibernate.Type.TypeHelper.Disassemble(Object[] row, ICacheAssembler[] types, Boolean[] nonCacheable, ISessionImplementor session, Object owner) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\TypeHelper.cs:line 101
at NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cache\StandardQueryCache.cs:line 86
at NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1564
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1513
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1487
at NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Criteria\CriteriaLoader.cs:line 76
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 1948
— End of inner exception stack trace —
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:line 1959
at NHibernate.Impl.CriteriaImpl.List(IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\CriteriaImpl.cs:line 265
at NHibernate.Impl.CriteriaImpl.List() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\CriteriaImpl.cs:line 256
at NHibernate.Impl.CriteriaImpl.UniqueResult() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\CriteriaImpl.cs:line 428
at NHibernate.Impl.CriteriaImpl.UniqueResult[T]() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\CriteriaImpl.cs:line 282
at Rhino.Commons.RepositoryImplBase`1.FindOne(DetachedCriteria criteria) in

If we remove the distinct results transformer from the query, then the problem goes away.

It's not a big show stopper (In many cases this is old code that incorrectly uses a distinct results transformer when it does not need to) - but I was wondering if this is an expected regression from past behavior, or just a bug?

Environment

None

Activity

Show:

Alex Zaytsev 
May 7, 2014 at 7:56 AM

Fixed by @ 4c38acbbb3700d8fe5407f0c8a32d8a08050ac02

Oskar Berggren 
December 29, 2012 at 4:16 PM

I've opened to propose porting the refactored handling of result transformers from Hibernate. It resolves the tests for NH-2961, but it's a bit to risky for 3.3.x. It will have to go into the next bigger version.

Oskar Berggren 
December 29, 2012 at 10:35 AM

Tests from attachment on integrated in NH2673/CachingWithTransformerTests.cs (ac09120b34efb3b078a77fb0932767e94e3f8e15)

Oskar Berggren 
December 25, 2012 at 10:48 PM

Broke in bf8056a8c32f0a7dbc99e94fd1a4727c8fe3cdd2 (between 3.1 and 3.2).

Alberto B 
November 1, 2012 at 12:31 PM

Seems like the same problem I have got https://nhibernate.jira.com/browse/NH-3311

Fixed

Details

Assignee

Reporter

Labels

Components

Fix versions

Affects versions

Priority

Who's Looking?

Open Who's Looking?
Created December 3, 2011 at 1:04 AM
Updated November 24, 2014 at 12:45 PM
Resolved May 7, 2014 at 7:56 AM
Who's Looking?