[hibernate-issues] [Hibernate-JIRA] Closed: (HHH-6856) RowValueConstructorSyntax with In syntax is not working

Steve Ebersole (JIRA) noreply at atlassian.com
Tue Nov 29 11:09:19 EST 2011


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6856?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steve Ebersole closed HHH-6856.
-------------------------------

    Resolution: Fixed

> RowValueConstructorSyntax with In syntax is not working
> -------------------------------------------------------
>
>                 Key: HHH-6856
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6856
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: query-sql
>    Affects Versions: 4.0.0.CR6
>            Reporter: Strong Liu
>            Assignee: Strong Liu
>             Fix For: 4.0.0.next
>
>
> _org.hibernate.test.hql.HQLTest#testRowValueConstructorSyntaxInInList_ fails on oracle.
> because this HQL "from LineItem l where l.id in (('a1',1,'b1'),('a2',2,'b2'))" is not correctly parsed.
> it throws the following exception:
> {quote}
> 16:43:59,245 DEBUG QueryTranslatorImpl:252 - --- SQL AST ---
>  \-[SELECT] QueryNode: 'SELECT'  querySpaces (LineItem)
>     +-[SELECT_CLAUSE] SelectClause: '{derived select clause}'
>     |  +-[SELECT_EXPR] SelectExpressionImpl: 'lineitem0_.customerId as customerId30_, lineitem0_.orderNumber as orderNum2_30_, lineitem0_.productId as productId30_' {FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=l,role=null,tableName=LineItem,tableAlias=lineitem0_,origin=null,columns={,className=LineItem}}}
>     |  \-[SQL_TOKEN] SqlFragment: 'lineitem0_.quantity as quantity30_'
>     +-[FROM] FromClause: 'from' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[l], fromElementByTableAlias=[lineitem0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]}
>     |  \-[FROM_FRAGMENT] FromElement: 'LineItem lineitem0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=l,role=null,tableName=LineItem,tableAlias=lineitem0_,origin=null,columns={,className=LineItem}}
>     \-[WHERE] SqlNode: 'where'
>        \-[IN] InLogicOperatorNode: 'in'
>           +-[DOT] DotNode: '(lineitem0_.customerId, lineitem0_.orderNumber, lineitem0_.productId)' {propertyName=id,dereferenceType=2,propertyPath=id,path=l.id,tableAlias=lineitem0_,className=LineItem,classAlias=l}
>           |  +-[ALIAS_REF] IdentNode: '(lineitem0_.customerId, lineitem0_.orderNumber, lineitem0_.productId)' {alias=l, className=LineItem, tableAlias=lineitem0_}
>           |  \-[IDENT] IdentNode: 'id' {originalText=id}
>           \-[IN_LIST] SqlNode: 'inList'
>              +-[VECTOR_EXPR] SqlNode: '{vector}'
>              |  +-[QUOTED_STRING] LiteralNode: ''a1''
>              |  +-[NUM_INT] LiteralNode: '1'
>              |  \-[QUOTED_STRING] LiteralNode: ''b1''
>              \-[VECTOR_EXPR] SqlNode: '{vector}'
>                 +-[QUOTED_STRING] LiteralNode: ''a2''
>                 +-[NUM_INT] LiteralNode: '2'
>                 \-[QUOTED_STRING] LiteralNode: ''b2''
> 16:43:59,249 DEBUG ErrorCounter:82 - throwQueryException() : no errors
> 16:43:59,252 ERROR ErrorCounter:54 - <AST>:0:0: unexpected AST node: {vector}
> 16:43:59,254 ERROR ErrorCounter:50 - <AST>:0:0: unexpected AST node: {vector}
> <AST>:0:0: unexpected AST node: {vector}
> 	at org.hibernate.hql.internal.antlr.SqlGeneratorBase.inList(SqlGeneratorBase.java:3155)
> 	at org.hibernate.hql.internal.antlr.SqlGeneratorBase.exoticComparisonExpression(SqlGeneratorBase.java:2965)
> 	at org.hibernate.hql.internal.antlr.SqlGeneratorBase.comparisonExpr(SqlGeneratorBase.java:1219)
> 	at org.hibernate.hql.internal.antlr.SqlGeneratorBase.booleanExpr(SqlGeneratorBase.java:857)
> {quote}
> I think the key is here
> {code:title=sql-gen.g}
> inList
> 	: #(IN_LIST { out(" "); } ( parenSelect | simpleExprList ) )
> 	;
> 	
> simpleExprList
> 	: { out("("); } (e:simpleExpr { separator(e," , "); } )* { out(")"); }
> 	;
> // A simple expression, or a sub-select with parens around it.
> expr
> 	: simpleExpr
> 	| #( VECTOR_EXPR { out("("); } (e:expr { separator(e," , "); } )*  { out(")"); } )
> 	| parenSelect
> 	| #(ANY { out("any "); } quantified )
> 	| #(ALL { out("all "); } quantified )
> 	| #(SOME { out("some "); } quantified )
> 	;
> {code}
> fromt this grammar, inList doesn't accept VECTOR

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list