[hibernate-commits] Hibernate SVN: r11372 - trunk/Hibernate3/src/org/hibernate/hql/ast/tree.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Thu Mar 29 15:08:53 EDT 2007
Author: steve.ebersole at jboss.com
Date: 2007-03-29 15:08:53 -0400 (Thu, 29 Mar 2007)
New Revision: 11372
Modified:
trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java
Log:
HHH-2534 : better improper HQL collection-dereference error message
Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java 2007-03-29 19:08:40 UTC (rev 11371)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java 2007-03-29 19:08:53 UTC (rev 11372)
@@ -32,9 +32,21 @@
///////////////////////////////////////////////////////////////////////////
// USED ONLY FOR REGRESSION TESTING!!!!
+ //
+ // todo : obviously get rid of all this junk ;)
///////////////////////////////////////////////////////////////////////////
public static boolean useThetaStyleImplicitJoins = false;
public static boolean REGRESSION_STYLE_JOIN_SUPPRESSION = false;
+ public static interface IllegalCollectionDereferenceExceptionBuilder {
+ public QueryException buildIllegalCollectionDereferenceException(String collectionPropertyName, FromReferenceNode lhs);
+ }
+ public static final IllegalCollectionDereferenceExceptionBuilder DEF_ILLEGAL_COLL_DEREF_EXCP_BUILDER = new IllegalCollectionDereferenceExceptionBuilder() {
+ public QueryException buildIllegalCollectionDereferenceException(String propertyName, FromReferenceNode lhs) {
+ String lhsPath = ASTUtil.getPathText( lhs );
+ return new QueryException( "illegal attempt to dereference collection [" + lhsPath + "] with element property reference [" + propertyName + "]" );
+ }
+ };
+ public static IllegalCollectionDereferenceExceptionBuilder ILLEGAL_COLL_DEREF_EXCP_BUILDER = DEF_ILLEGAL_COLL_DEREF_EXCP_BUILDER;
///////////////////////////////////////////////////////////////////////////
private static final Log log = LogFactory.getLog( DotNode.class );
@@ -186,24 +198,26 @@
return;
}
- // The property is a component...
if ( propertyType.isComponentType() ) {
+ // The property is a component...
checkLhsIsNotCollection();
dereferenceComponent( parent );
initText();
}
- // The property is another class..
else if ( propertyType.isEntityType() ) {
+ // The property is another class..
checkLhsIsNotCollection();
dereferenceEntity( ( EntityType ) propertyType, implicitJoin, classAlias, generateJoin, parent );
initText();
}
- // The property is a collection...
else if ( propertyType.isCollectionType() ) {
+ // The property is a collection...
checkLhsIsNotCollection();
dereferenceCollection( ( CollectionType ) propertyType, implicitJoin, false, classAlias, parent );
}
- else { // Otherwise, this is a primitive type.
+ else {
+ // Otherwise, this is a primitive type.
+ checkLhsIsNotCollection();
dereferenceType = DEREF_PRIMITIVE;
initText();
}
@@ -493,9 +507,7 @@
private void checkLhsIsNotCollection() throws SemanticException {
if ( getLhs().getDataType() != null && getLhs().getDataType().isCollectionType() ) {
- // TODO : this exactly matches the output of the old parser, but we might want to be more explicit here
- // that will however cause regression issues in HQLTest
- throw new SemanticException( "illegal syntax near collection: " + propertyName );
+ throw ILLEGAL_COLL_DEREF_EXCP_BUILDER.buildIllegalCollectionDereferenceException( propertyName, getLhs() );
}
}
private void dereferenceComponent(AST parent) {
More information about the hibernate-commits
mailing list