[hibernate-commits] Hibernate SVN: r16385 - in core/branches/antlr3/src: main/java/org/hibernate/sql/ast/common and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Apr 21 13:33:52 EDT 2009


Author: porcelli
Date: 2009-04-21 13:33:51 -0400 (Tue, 21 Apr 2009)
New Revision: 16385

Modified:
   core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQL.g
   core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQLTreeWalker.g
   core/branches/antlr3/src/main/java/org/hibernate/sql/ast/common/HibernateTree.java
   core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContext.java
   core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContextDefaultImpl.java
   core/branches/antlr3/src/main/java/org/hibernate/sql/ast/tree/EntityNameTree.java
   core/branches/antlr3/src/test/gunit/org/hibernate/sql/ast/phase/hql/parse/TempgUnitHQLGrammar.testsuite
Log:
hql parser updates:
 - now generating aliases for all persisterSpaces
 - now generating the select clause (implicit)
 - .indices and .elements are not supported (forces users use function)

Modified: core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQL.g
===================================================================
--- core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQL.g	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQL.g	2009-04-21 17:33:51 UTC (rev 16385)
@@ -8,6 +8,7 @@
 //GENERIC SQL TOKENS
 	TABLE;
 	COLUMN;
+	COLUMN_LIST;
 
 //VIRTUAL TOKENS
 	ALIAS_NAME;
@@ -189,6 +190,7 @@
 import java.util.HashSet;
 import java.util.Set;
 import java.util.Iterator;
+import org.hibernate.sql.ast.tree.EntityNameTree;
 }
 
 @lexer::header {
@@ -349,7 +351,7 @@
     	return implementors;
     }
     
-	private Object generatePersisterSpacesTree(List persistenceSpaces) {
+	private Tree generatePersisterSpacesTree(List persistenceSpaces) {
 	    List persisterSpaceList = new ArrayList();
 	    for (Iterator iterator = persistenceSpaces.iterator(); iterator
 				.hasNext();) {
@@ -372,54 +374,77 @@
 
 		return resultTree;
 	}
-	
-    private Object generateUpdateStatementTree(Object updateKey, Object entityName,
-			Object aliasClause, Object setClause, Object whereClause) {
-		Object result = (Object)adaptor.nil();
-    	EntityNameTree entityNameTree = (EntityNameTree) entityName;
-    	for (int i = 0; i < entityNameTree.getEntityCount(); i++) {
-    		Object root_1 = (Object)adaptor.nil();
-    		root_1 = (Object)adaptor.becomeRoot(new CommonTree((CommonTree)updateKey), root_1);
 
-    		adaptor.addChild(root_1, new EntityNameTree(entityNameTree, entityNameTree.getEntityName(i)));
+	private Tree generateUpdateStatementTree(Object updateKey,
+			Object entityName, Object aliasClause, Object setClause,
+			Object whereClause) {
+		Tree result = new CommonTree();
+		EntityNameTree entityNameTree = (EntityNameTree) entityName;
+		for (int i = 0; i < entityNameTree.getEntityCount(); i++) {
+			Tree updateRoot = new CommonTree((CommonTree) updateKey);
 
-    		if ( aliasClause != null ) {
-    		    adaptor.addChild(root_1, aliasClause);
-    		}
-    		adaptor.addChild(root_1, setClause);
+			updateRoot.addChild(new EntityNameTree(entityNameTree,
+					entityNameTree.getEntityName(i)));
 
-    		if ( whereClause != null ) {
-    		    adaptor.addChild(root_1, whereClause);
-    		}
+			if (aliasClause != null) {
+				updateRoot.addChild((Tree) aliasClause);
+			}
+			updateRoot.addChild((Tree) setClause);
 
-    		adaptor.addChild(result, root_1);
+			if (whereClause != null) {
+				updateRoot.addChild((Tree) whereClause);
+			}
+
+			result.addChild(updateRoot);
 		}
 		return result;
 	}
-	
-	private Object generateDeleteStatementTree(Object deleteKey, Object entityName,
-			Object aliasClause, Object whereClause) {
-		Object result = (Object)adaptor.nil();
-    	EntityNameTree entityNameTree = (EntityNameTree) entityName;
-    	for (int i = 0; i < entityNameTree.getEntityCount(); i++) {
-    		Object root_1 = (Object)adaptor.nil();
-    		root_1 = (Object)adaptor.becomeRoot(new CommonTree((CommonTree)deleteKey), root_1);
 
-    		adaptor.addChild(root_1, new EntityNameTree(entityNameTree, entityNameTree.getEntityName(i)));
+	private Tree generateDeleteStatementTree(Object deleteKey,
+			Object entityName, Object aliasClause, Object whereClause) {
+		Tree result = new CommonTree();
+		EntityNameTree entityNameTree = (EntityNameTree) entityName;
+		for (int i = 0; i < entityNameTree.getEntityCount(); i++) {
+			Tree deleteRoot = new CommonTree((CommonTree) deleteKey);
 
-    		if ( aliasClause != null ) {
-    		    adaptor.addChild(root_1, aliasClause);
-    		}
+			deleteRoot.addChild(new EntityNameTree(entityNameTree,
+					entityNameTree.getEntityName(i)));
 
-    		if ( whereClause != null ) {
-    		    adaptor.addChild(root_1, whereClause);
-    		}
+			if (aliasClause != null) {
+				deleteRoot.addChild((Tree) aliasClause);
+			}
 
-    		adaptor.addChild(result, root_1);
+			if (whereClause != null) {
+				deleteRoot.addChild((Tree) whereClause);
+			}
+
+			result.addChild(deleteRoot);
 		}
 		return result;
 	}
 	
+	private Tree generateSelecFromTree(Object selectClause, Object fromClause, List aliasList){
+		Tree result = new CommonTree(new CommonToken(SELECT_FROM, "SELECT_FROM"));
+		Tree selectTree = null;
+		result.addChild((Tree) fromClause);
+		if (selectClause == null && aliasList != null && aliasList.size() > 0) {
+			selectTree = new CommonTree(new CommonToken(SELECT, "SELECT"));
+			Tree selectList = new CommonTree(new CommonToken(SELECT_LIST, "SELECT_LIST"));
+			for (Iterator iterator = aliasList.iterator(); iterator
+					.hasNext();) {
+				String aliasName = (String) iterator.next();
+				Tree selectElement = new CommonTree(new CommonToken(SELECT_ITEM, "SELECT_ITEM"));
+				Tree aliasElement = new CommonTree(new CommonToken(ALIAS_REF, aliasName));
+				selectElement.addChild(aliasElement);
+				selectList.addChild(selectElement);
+			}
+			selectTree.addChild(selectList);
+		} else {
+			selectTree = (Tree) selectClause;
+		}
+		result.addChild(selectTree);
+		return result;
+	}
 }
 
 filterStatement[String collectionRole]
@@ -446,7 +471,7 @@
 }
 	:	udpate_key
 		(versioned_key {$updateStatement::generateVersionedField = true;})? 
-			from_key? entityName aliasClause setClause whereClause?
+			from_key? entityName aliasClause[true] setClause whereClause?
 		-> {	generateUpdateStatementTree($udpate_key.tree, $entityName.tree, $aliasClause.tree, $setClause.tree, $whereClause.tree )	}
 	;
 
@@ -465,7 +490,7 @@
 	;
 
 deleteStatement
-	:	delete_key from_key? entityName aliasClause whereClause?
+	:	delete_key from_key? entityName aliasClause[true] whereClause?
 		-> {	generateDeleteStatementTree($delete_key.tree, $entityName.tree, $aliasClause.tree, $whereClause.tree )	}
 	;
 
@@ -476,7 +501,8 @@
 
 //TODO: Generate an exception when try to use a polimorfic entity at INTO clause
 intoClause
-	:	into_key^ entityName insertabilitySpecification
+	:	into_key entityName insertabilitySpecification
+		-> ^(into_key entityName ALIAS_NAME[context.buildUniqueImplicitAlias()] insertabilitySpecification)
 	;
 
 insertabilitySpecification
@@ -525,8 +551,8 @@
 	;
 
 selectFrom
-	:	selectClause? fromClause
-		-> ^(SELECT_FROM fromClause selectClause?)
+	:	sc=selectClause? fc=fromClause
+		-> { generateSelecFromTree($sc.tree, $fc.tree, $fc.aliasList)}
 	;
 
 subQuery
@@ -536,7 +562,12 @@
 		-> ^(SUB_QUERY ^(QUERY queryExpression))
 	;
 
-fromClause
+fromClause returns [List aliasList]
+scope{
+	List aliases;
+}
+ at init	{	$fromClause::aliases = new ArrayList();	}
+ at after	{	$aliasList = $fromClause::aliases;	}
 	:	from_key^ 
 			persisterSpaces
 	;
@@ -556,8 +587,9 @@
 	;
 
 qualifiedJoin
- at init	{ boolean isEntityReference = false; List entityNames = null; }
-	:	nonCrossJoinType join_key fetch_key? path aliasClause
+ at init	{ boolean isEntityReference = false; boolean hasFetch = false; List entityNames = null; }
+ at after	{ if (!hasFetch) $fromClause::aliases.add(((Tree)$ac.tree).getText()); }
+	:	nonCrossJoinType join_key (fetch_key {hasFetch = true;})? path ac=aliasClause[true]
 	(	on_key 
 	{	isEntityReference = true;
 		entityNames = extractEntityNames($path.text);	} 
@@ -593,7 +625,8 @@
 	;
 
 mainEntityPersisterReference
-	:	entityName aliasClause propertyFetch?
+ at after	{ $fromClause::aliases.add(((Tree)$ac.tree).getText()); }
+	:	entityName ac=aliasClause[true] propertyFetch?
 		-> ^(ENTITY_PERSISTER_REF entityName aliasClause? propertyFetch?)
 	;
 
@@ -604,14 +637,16 @@
 
 hibernateLegacySyntax returns [boolean isPropertyJoin]
 @init {$isPropertyJoin = false;}
-	:	aliasDeclaration in_key
+ at after	{ $fromClause::aliases.add(((Tree)$ad.tree).getText()); }
+	:	ad=aliasDeclaration in_key
 	(	class_key entityName -> ^(ENTITY_PERSISTER_REF entityName aliasDeclaration) 
 	|	collectionExpression {$isPropertyJoin = true;} -> ^(PROPERTY_JOIN INNER[$in_key.start, "inner legacy"] aliasDeclaration collectionExpression)
 	)
 	;
 
 jpaCollectionReference
-	:	in_key LEFT_PAREN propertyReference RIGHT_PAREN aliasClause
+ at after	{ $fromClause::aliases.add(((Tree)$ac.tree).getText()); }
+	:	in_key LEFT_PAREN propertyReference RIGHT_PAREN ac=aliasClause[true]
 		-> ^(PROPERTY_JOIN INNER[$in_key.start, "inner"] aliasClause? propertyReference) 
 	;
 
@@ -638,14 +673,15 @@
 @init	{ if (state.backtracking == 0) enableParameterUsage.push(Boolean.FALSE); }
 @after	{ enableParameterUsage.pop(); }
 //PARAMETERS CAN'T BE USED -> This verification should be scoped
-	:	expression aliasClause
+	:	expression aliasClause[false]
 		-> ^(SELECT_ITEM expression aliasClause?)
 	;
 
-aliasClause
+aliasClause[boolean generateAlias]
 options{
     k=2;
-}	:
+}	:	-> {$generateAlias}? ALIAS_NAME[context.buildUniqueImplicitAlias()]
+		->
 	|	aliasDeclaration
 	|	as_key! aliasDeclaration
 	;
@@ -807,7 +843,7 @@
 	|	standardFunction
 	|	setFunction
 	|	collectionFunction
-	|	collectionExpressionSimple
+	|	collectionExpression
 	|	atom
 	;
 
@@ -854,8 +890,8 @@
 
 quantifiedExpression
 	:	( some_key^ | exists_key^ | all_key^ | any_key^ ) 
-	(	aliasReference
-	|	collectionExpression
+	(	collectionExpression
+	|	aliasReference
 	|	LEFT_PAREN! subQuery RIGHT_PAREN!
 	)
 	;
@@ -1024,14 +1060,8 @@
 
 countFunctionArguments
 @init { int type = -1;}
-	:	path
-		-> {type == 1}? ^(ELEMENTS ^(PROPERTY_REFERENCE path))
-	    -> {type == 2}? ^(INDICES ^(PROPERTY_REFERENCE path))
-		-> ^(PROPERTY_REFERENCE path)
-	//TODO if ends with:
-	//  .elements or .indices -> it is a collectionExpression
-	//if not -> it is a property reference
-	|	collectionExpressionSimple
+	:	propertyReference
+	|	collectionExpression
 	|	numeric_literal
 	;
 
@@ -1043,25 +1073,17 @@
 
 collectionExpression
 	:	(elements_key^|indices_key^) LEFT_PAREN! propertyReference RIGHT_PAREN!
-	|	propertyReference DOT! (elements_key^|indices_key^)
 	;
 
-collectionExpressionSimple
-	:	(elements_key^|indices_key^) LEFT_PAREN! propertyReference RIGHT_PAREN!
-	;
-
 atom
 @init { int type = -1;}
 	:	identPrimary
 	    //TODO  if ends with:
 	    //  .class -> class type
-	    //  .elements or .indices -> it is a collectionExpression
 	    //  if contains "()" it is a function call 
 	    //  if it is constantReference (using context)
 	    //  otherwise it will be a generic element to be resolved on the next phase (1st tree walker)
 	    -> {type == 0}? ^(DOT_CLASS identPrimary)
-	    -> {type == 1}? ^(ELEMENTS ^(PROPERTY_REFERENCE identPrimary))
-	    -> {type == 2}? ^(INDICES ^(PROPERTY_REFERENCE identPrimary))
 	    -> {type == 3}? ^(GENERAL_FUNCTION_CALL identPrimary)
 	    -> {type == 4}? ^(JAVA_CONSTANT identPrimary) //-> here will have 2 strutctures element and the constant
 	    -> ^(PATH identPrimary)
@@ -1826,4 +1848,4 @@
 
 AMPERSAND
 	:	'&'	
-	;
\ No newline at end of file
+	;

Modified: core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQLTreeWalker.g
===================================================================
--- core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQLTreeWalker.g	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/antlr3/org/hibernate/sql/ast/phase/hql/parse/HQLTreeWalker.g	2009-04-21 17:33:51 UTC (rev 16385)
@@ -138,8 +138,12 @@
 	:	persisterSpaceRoot joins*
 	;
 
+persisterSpaceRoot
+	:	^(ENTITY_PERSISTER_REF entityName PROP_FETCH?)
+	;
+
 joins
-	:	^(PROPERTY_JOIN joinType FETCH? ALIAS_NAME? PROP_FETCH? (propertyReference|collectionExpression) withClause?)
+	:	^(PROPERTY_JOIN joinType FETCH? ALIAS_NAME PROP_FETCH? collectionExpression withClause?)
 	|	^(PERSISTER_JOIN joinType persisterSpaceRoot onClause?)
 	;
 
@@ -157,10 +161,6 @@
 	|	(LEFT |	RIGHT | FULL) OUTER?
 	;
 
-persisterSpaceRoot
-	:	^(ENTITY_PERSISTER_REF entityName PROP_FETCH?)
-	;
-
 selectClause
 	:	^(SELECT DISTINCT? rootSelectExpression) 
 	;
@@ -258,7 +258,7 @@
 	:	caseExpression
 	|	function
 	|	collectionFunction
-	|	collectionExpression
+	|	collectionExpressionSimple
 	|	constant
 	|	parameter
 	|	propertyReference
@@ -434,7 +434,7 @@
 	;
 
 countFunctionArguments
-	:	collectionExpression
+	:	collectionExpressionSimple
 	|	propertyReference
 	|	numeric_literal
 	;
@@ -448,9 +448,15 @@
 	:	propertyReference
 	;
 
+collectionExpressionSimple
+	:	^(ELEMENTS propertyReference) //it will generate a SELECT m.column form Table xxx -> it is realted to Hibernate mappings to Table->Map
+	|	^(INDICES propertyReference)
+	;
+
 collectionExpression
 	:	^(ELEMENTS propertyReference) //it will generate a SELECT m.column form Table xxx -> it is realted to Hibernate mappings to Table->Map
 	|	^(INDICES propertyReference)
+	|	propertyReference
 	;
 
 parameter
@@ -481,7 +487,7 @@
 	;
 
 entityName
-	:	ENTITY_NAME ALIAS_NAME?
+	:	ENTITY_NAME ALIAS_NAME
 	;
 
 propertyReference

Modified: core/branches/antlr3/src/main/java/org/hibernate/sql/ast/common/HibernateTree.java
===================================================================
--- core/branches/antlr3/src/main/java/org/hibernate/sql/ast/common/HibernateTree.java	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/java/org/hibernate/sql/ast/common/HibernateTree.java	2009-04-21 17:33:51 UTC (rev 16385)
@@ -34,7 +34,7 @@
 
 /**
  * todo : javadocs
- *
+ * 
  * @author Steve Ebersole
  */
 public class HibernateTree extends CommonTree {
@@ -48,30 +48,33 @@
 	 */
 	int endCharOffset = -1;
 
+	public HibernateTree() {
+	}
+
 	public HibernateTree(HibernateTree node) {
-		super( node );
+		super(node);
 		this.token = node.token;
 	}
 
 	public HibernateTree(Token token) {
-		super( token );
+		super(token);
 	}
 
 	public HibernateTree(int type, String text) {
-		this( new HibernateToken( type, text ) );
+		this(new HibernateToken(type, text));
 	}
 
 	public HibernateTree(int type) {
-		this( new HibernateToken( type ) );
+		this(new HibernateToken(type));
 	}
 
 	public Tree dupNode() {
-		return new HibernateTree( this );
+		return new HibernateTree(this);
 	}
 
 	/**
 	 * getter for start char offset
-	 *
+	 * 
 	 * @return start char offset
 	 */
 	public int getStartCharOffset() {
@@ -80,8 +83,9 @@
 
 	/**
 	 * setter for start char offset
-	 *
-	 * @param startCharOffset start char offset
+	 * 
+	 * @param startCharOffset
+	 *            start char offset
 	 */
 	public void setStartCharOffset(int startCharOffset) {
 		this.startCharOffset = startCharOffset;
@@ -89,7 +93,7 @@
 
 	/**
 	 * getter of end char offset
-	 *
+	 * 
 	 * @return end char offset
 	 */
 	public int getEndCharOffset() {
@@ -98,8 +102,9 @@
 
 	/**
 	 * setter of end char offset
-	 *
-	 * @param endCharOffset end char offset
+	 * 
+	 * @param endCharOffset
+	 *            end char offset
 	 */
 	public void setEndCharOffset(int endCharOffset) {
 		this.endCharOffset = endCharOffset;

Modified: core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContext.java
===================================================================
--- core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContext.java	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContext.java	2009-04-21 17:33:51 UTC (rev 16385)
@@ -9,4 +9,6 @@
 	public boolean isEntityName(String text);
 
 	public List getEntityImplementors(String text);
+	
+	public String buildUniqueImplicitAlias();
 }

Modified: core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContextDefaultImpl.java
===================================================================
--- core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContextDefaultImpl.java	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/java/org/hibernate/sql/ast/phase/hql/parse/ParserContextDefaultImpl.java	2009-04-21 17:33:51 UTC (rev 16385)
@@ -3,8 +3,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.hibernate.sql.ast.alias.ImplicitAliasGenerator;
+
 public class ParserContextDefaultImpl implements ParserContext {
 
+	private ImplicitAliasGenerator implicitAliasGenerator = new ImplicitAliasGenerator(); 
+	
 	public List getEntityImplementors(String text) {
 		List implementors = new ArrayList();
 		implementors.add(text);
@@ -19,4 +23,8 @@
 		return false;
 	}
 
+	public String buildUniqueImplicitAlias() {
+		return implicitAliasGenerator.buildUniqueImplicitAlias();
+	}
+
 }

Modified: core/branches/antlr3/src/main/java/org/hibernate/sql/ast/tree/EntityNameTree.java
===================================================================
--- core/branches/antlr3/src/main/java/org/hibernate/sql/ast/tree/EntityNameTree.java	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/main/java/org/hibernate/sql/ast/tree/EntityNameTree.java	2009-04-21 17:33:51 UTC (rev 16385)
@@ -4,20 +4,21 @@
 
 import org.antlr.runtime.CommonToken;
 import org.antlr.runtime.Token;
-import org.antlr.runtime.tree.CommonTree;
+import org.hibernate.sql.ast.common.HibernateTree;
 
-public class EntityNameTree extends CommonTree {
+public class EntityNameTree extends HibernateTree {
 
 	private List entityNames = null;
 	private String outputText = null;
 
 	public EntityNameTree(EntityNameTree entityNameTree, String outputText) {
-		this.token = entityNameTree.getToken();
+		super(entityNameTree.getToken());
 		this.outputText = outputText;
 	}
 
 	public EntityNameTree(int tokenType, Token token, String tokenText,
 			List entityNames) {
+		super(token);
 		Token newToken = createToken(token);
 		newToken.setType(tokenType);
 		newToken.setText(tokenText);
@@ -28,7 +29,15 @@
 	private Token createToken(Token fromToken) {
 		return new CommonToken(fromToken);
 	}
-	
+
+	public int getEntityCount() {
+		return entityNames.size();
+	}
+
+	public String getEntityName(int index) {
+		return (String) entityNames.get(index);
+	}
+
 	public String toString() {
 		if (outputText == null) {
 			outputText = entityNames.get(0).toString();

Modified: core/branches/antlr3/src/test/gunit/org/hibernate/sql/ast/phase/hql/parse/TempgUnitHQLGrammar.testsuite
===================================================================
--- core/branches/antlr3/src/test/gunit/org/hibernate/sql/ast/phase/hql/parse/TempgUnitHQLGrammar.testsuite	2009-04-21 15:40:24 UTC (rev 16384)
+++ core/branches/antlr3/src/test/gunit/org/hibernate/sql/ast/phase/hql/parse/TempgUnitHQLGrammar.testsuite	2009-04-21 17:33:51 UTC (rev 16385)
@@ -26,6 +26,9 @@
 "from org.hibernate.test.Inner i where i.outer.inner.middle = 'xyz'"  OK
 //testDynamicInstantiation
 "select new list(a, mate) from Animal a join a.mate as mate"  OK
+"from Animal join a.mate"  OK
+"from Animal, aaa , dddd"  OK
+"from Animal, aaa join fetch dddd" OK
 //testListOrMapKeywordReference
 "select p from eg.NameList nl, eg.Person p where p.name = some elements(nl.names)"  OK
 "select p from eg.NameList list, eg.Person p where p.name = some elements(list.names)"  OK
@@ -1526,7 +1529,7 @@
 //ASTParserLoadingTest.testDynamicInstantiationQueries
 "select new list(an.description, an.bodyWeight) from Animal an"  OK
 "select new map(an.description, an.bodyWeight) from Animal an"  OK
-"select new map(an.description as descr, an.bodyWeight as bw) from Animal an"  -> (AAA)
+"select new map(an.description as descr, an.bodyWeight as bw) from Animal an"  OK
 //ASTParserLoadingTest.testResultTransformerScalarQueries
 "select an.description as description, an.bodyWeight as bodyWeight from Animal an order by bodyWeight desc"  OK
 "select a from Animal a, Animal b order by a.id"  OK




More information about the hibernate-commits mailing list