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