It looks like this bug 
fix<https://github.com/nhibernate/nhibernate-core/commit/4a8a724562a29dcb8e7eb53e0d9e3d207b44db8b#src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs>(NH-2736)
 to NHibernate.Hql.Ast.ANTLR.Tree.FromElement.RenderText() is to 
blame. Not sure how much more time I can spend in this code before we 
decide to go with plan B (rewrite hql queries), but I will try to report 
back if I come up with a patch.


On Friday, July 20, 2012 10:02:05 AM UTC-4, Juan wrote:
>
> This post is more of a confirmation request that there are problems with 
> HQL and With clause in the latest NH release. We are upgrading from NH 
> 3.1.0.4000 and during the check of named queries step, in session factory 
> creation, an IndexOutOfRange exception is thrown.
>  
> I narrow it down to hql queries which use the "with" clause, and have 
> parameters. If the parameter(s) are removed (i.e, hard coded), the session 
> factory gets build and no exceptions are thrown. We also have the dialect 
> set to oracle9i, if we change it to oracle10g (main difference is the usage 
> of ansi joins), the problem disappears as well
>  
> Sample hql showing problems:
> from ProductCategoryGroup p join p.DistributionPoints as d with d.id = 
> :distribuionPointId
> Log:
> 09:54:44,176 [1] INFO  NHibernate.Cfg.Environment - NHibernate 3.3.1.4000 
> (3.3.1.4000)
> ...
> 09:54:46,729 [1] DEBUG NHibernate.Impl.SessionFactoryImpl - Checking 1 
> named HQL queries
> 09:54:46,730 [1] DEBUG NHibernate.Impl.SessionFactoryImpl - Checking named 
> query: ProdCatByDistPoint
> 09:54:46,734 [1] DEBUG Engine.Query.QueryPlanCache - unable to locate HQL 
> query plan in cache; generating (from ProductCategoryGroup p join 
> p.DistributionPoints as d with d.id = :distribuionPointId)
> 09:54:46,848 [1] DEBUG Ast.ANTLR.HqlParseEngine - parse() - HQL: from 
> ProductCategoryGroup p join p.DistributionPoints as d with d.id = 
> :distribuionPointId
> 09:54:46,999 [1] DEBUG Ast.ANTLR.ErrorCounter - throwQueryException() : no 
> errors
> 09:54:47,107 [1] DEBUG Ast.ANTLR.HqlSqlWalker - select << begin [level=1, 
> statement=select]
> 09:54:47,135 [1] DEBUG ANTLR.Tree.FromElement - FromClause{level=1} :  
> ScratchPad.Model.ProductCategoryGroup (p) -> productcat0_
> 09:54:47,159 [1] DEBUG ANTLR.Tree.FromReferenceNode - Resolved :  p -> 
> productcat0_.PRODUCT_CATEGORY_GROUP_ID
> 09:54:47,169 [1] INFO  ANTLR.Tree.FromElement - handling property 
> dereference [ScratchPad.Model.ProductCategoryGroup (p) -> 
> DistributionPoints (Class)]
> 09:54:47,177 [1] DEBUG ANTLR.Tree.DotNode - getDataType() : 
> DistributionPoints -> 
> NHibernate.Type.GenericSetType`1[[ScratchPad.Model.DistributionPoint](ScratchPad.Model.ProductCategoryGroup.DistributionPoints)
> 09:54:47,187 [1] DEBUG ANTLR.Tree.FromElementFactory - createManyToMany() 
> : path = p.DistributionPoints role = 
> ScratchPad.Model.ProductCategoryGroup.DistributionPoints 
> associatedEntityName = ScratchPad.Model.DistributionPoint
> 09:54:47,194 [1] DEBUG ANTLR.Tree.FromElement - FromClause{level=1} :  
> ScratchPad.Model.DistributionPoint (d) -> distributi2_
> 09:54:47,197 [1] DEBUG ANTLR.Tree.FromClause - addJoinByPathMap() : 
> p.DistributionPoints -> DISTRIBUTION_POINT distributi2_
> 09:54:47,198 [1] DEBUG ANTLR.Tree.DotNode - dereferenceCollection() : 
> Created new FROM element for p.DistributionPoints : 
> DSTRBTN_PNT_PRDCT_CTG_GRP distributi2_
> 09:54:47,199 [1] DEBUG ANTLR.Tree.FromReferenceNode - Resolved :  
> p.DistributionPoints -> .
> 09:54:47,247 [1] DEBUG ANTLR.Tree.FromReferenceNode - Resolved :  d -> 
> distributi2_.DISTRIBUTION_POINT_ID
> 09:54:47,248 [1] INFO  ANTLR.Tree.FromElement - handling property 
> dereference [ScratchPad.Model.DistributionPoint (d) -> id (Class)]
> 09:54:47,249 [1] DEBUG ANTLR.Tree.DotNode - getDataType() : id -> 
> NHibernate.Type.Int64Type
> 09:54:47,250 [1] DEBUG ANTLR.Tree.FromReferenceNode - Resolved :  d.id -> 
> distributi2_.DISTRIBUTION_POINT_ID
> 09:54:47,263 [1] DEBUG Ast.ANTLR.HqlSqlWalker - handleWithFragment() : ( 
> with ( = ( distributi2_.DISTRIBUTION_POINT_ID 
> distributi2_.DISTRIBUTION_POINT_ID id ) ? ) )
> 09:54:47,328 [1] DEBUG Ast.ANTLR.HqlSqlWalker - createFromJoinElement() : 
> DSTRBTN_PNT_PRDCT_CTG_GRP distributi2_
> 09:54:47,331 [1] DEBUG Ast.ANTLR.HqlSqlWalker - select : finishing up 
> [level=1, statement=select]
> 09:54:47,333 [1] DEBUG Ast.ANTLR.HqlSqlWalker - processQuery() : ( SELECT 
> ( FromClause{level=1} ( PRODUCT_CATEGORY_GROUP productcat0_ 
> DSTRBTN_PNT_PRDCT_CTG_GRP distributi2_ ) ) )
> 09:54:47,351 [1] DEBUG Ast.ANTLR.HqlSqlWalker - Derived SELECT clause 
> created.
> 09:54:47,362 [1] DEBUG ANTLR.Util.JoinProcessor - Using FROM fragment 
> [PRODUCT_CATEGORY_GROUP productcat0_]
> 09:54:47,368 [1] DEBUG ANTLR.Util.JoinProcessor - Using FROM fragment 
> [DSTRBTN_PNT_PRDCT_CTG_GRP distributi1_, DISTRIBUTION_POINT distributi2_]
> 09:54:47,368 [1] DEBUG ANTLR.Util.SyntheticAndFactory - Using unprocessed 
> WHERE-fragment 
> [productcat0_.PRODUCT_CATEGORY_GROUP_ID=distributi1_.PRODUCT_CATEGORY_GROUP_ID
>  
> and distributi1_.DISTRIBUTION_POINT_ID=distributi2_.DISTRIBUTION_POINT_ID 
> and (distributi2_.DISTRIBUTION_POINT_ID=?)]
> 09:54:47,369 [1] DEBUG ANTLR.Util.SyntheticAndFactory - Using processed 
> WHERE-fragment 
> [productcat0_.PRODUCT_CATEGORY_GROUP_ID=distributi1_.PRODUCT_CATEGORY_GROUP_ID
>  
> and distributi1_.DISTRIBUTION_POINT_ID=distributi2_.DISTRIBUTION_POINT_ID 
> and (distributi2_.DISTRIBUTION_POINT_ID=?)]
> 09:54:47,370 [1] DEBUG ANTLR.Tree.QueryNode - getWhereClause() : Creating 
> a new WHERE clause...
> 09:54:47,372 [1] DEBUG Ast.ANTLR.HqlSqlWalker - select >> end [level=1, 
> statement=select]
> 09:54:47,373 [1] DEBUG Ast.ANTLR.ErrorCounter - throwQueryException() : no 
> errors
> 09:54:47,399 [1] DEBUG Ast.ANTLR.ErrorCounter - throwQueryException() : no 
> errors
> *09:54:47,400 [1] FATAL Program - Unhandled Exception
> System.IndexOutOfRangeException: Index was outside the bounds of the array.
>    at 
> NHibernate.Hql.Ast.ANTLR.Tree.FromElement.RenderText(ISessionFactoryImplementor
>  
> sessionFactory) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Tree\FromElement.cs:line
>  
> 347
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.Out(IASTNode n) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\SqlGenerator.cs:line
>  
> 138
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.NestedFromFragment(IASTNode d, 
> IASTNode parent) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\SqlGenerator.cs:line
>  
> 261
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.tableJoin(IASTNode parent) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Generated\SqlGenerator.cs:line
>  
> 2874
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.fromTable() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Generated\SqlGenerator.cs:line
>  
> 2689
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.from() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Generated\SqlGenerator.cs:line
>  
> 2593
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.selectStatement() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Generated\SqlGenerator.cs:line
>  
> 486
>    at NHibernate.Hql.Ast.ANTLR.SqlGenerator.statement() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\Generated\SqlGenerator.cs:line
>  
> 407
>    at NHibernate.Hql.Ast.ANTLR.HqlSqlGenerator.Generate() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line
>  
> 611
>    at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 
> replacements, Boolean shallow, String collectionRole) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line
>  
> 353
>    at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 
> replacements, Boolean shallow) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line
>  
> 72
>    at 
> NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode
>  
> ast, String queryIdentifier, String collectionRole, Boolean shallow, 
> IDictionary`2 filters, ISessionFactoryImplementor factory) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:line
>  
> 43
>    at 
> NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String
>  
> queryString, String collectionRole, Boolean shallow, IDictionary`2 filters, 
> ISessionFactoryImplementor factory) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:line
>  
> 21
>    at NHibernate.Engine.Query.HQLStringQueryPlan.CreateTranslators(String 
> hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, 
> ISessionFactoryImplementor factory) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Engine\Query\HQLStringQueryPlan.cs:line
>  
> 24
>    at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, String 
> collectionRole, Boolean shallow, IDictionary`2 enabledFilters, 
> ISessionFactoryImplementor factory) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Engine\Query\HQLStringQueryPlan.cs:line
>  
> 16
>    at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, Boolean 
> shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) 
> in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Engine\Query\HQLStringQueryPlan.cs:line
>  
> 10
>    at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String 
> queryString, Boolean shallow, IDictionary`2 enabledFilters) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Engine\Query\QueryPlanCache.cs:line
>  
> 61
>    at NHibernate.Impl.SessionFactoryImpl.CheckNamedQueries() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Impl\SessionFactoryImpl.cs:line
>  
> 1109
>    at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping 
> mapping, Settings settings, EventListeners listeners) in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Impl\SessionFactoryImpl.cs:line
>  
> 363
>    at NHibernate.Cfg.Configuration.BuildSessionFactory() in 
> D:\Downloads\nhibernate33\nhibernate-nhibernate-core-7f3252b\src\NHibernate\Cfg\Configuration.cs:line
>  
> 1258
>    at ScratchPad.Program.Main(String[] args) in 
> D:\Home\Temp\ExtractionPerformanceTest\ScratchPad\Program.cs:line 25*
>  
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/NJhNnCUaTUcJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to