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.