|
From: <hib...@li...> - 2006-07-27 14:13:30
|
Author: ste...@jb...
Date: 2006-07-26 14:04:07 -0400 (Wed, 26 Jul 2006)
New Revision: 10173
Modified:
branches/Branch_3_2/Hibernate3/src/org/hibernate/hql/ast/tree/FromClause.java
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/ql/JPAQLComplianceTest.java
Log:
ported fix for HHH-1948 to 3.2 branch
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/hql/ast/tree/FromClause.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/hql/ast/tree/FromClause.java 2006-07-26 18:01:49 UTC (rev 10172)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/hql/ast/tree/FromClause.java 2006-07-26 18:04:07 UTC (rev 10173)
@@ -103,12 +103,27 @@
*/
public FromElement getFromElement(String aliasOrClassName) {
FromElement fromElement = ( FromElement ) fromElementByClassAlias.get( aliasOrClassName );
+ if ( fromElement == null && getSessionFactoryHelper().isStrictJPAQLComplianceEnabled() ) {
+ fromElement = findIntendedAliasedFromElementBasedOnCrazyJPARequirements( aliasOrClassName );
+ }
if ( fromElement == null && parentFromClause != null ) {
fromElement = parentFromClause.getFromElement( aliasOrClassName );
}
return fromElement;
}
+ private FromElement findIntendedAliasedFromElementBasedOnCrazyJPARequirements(String specifiedAlias) {
+ Iterator itr = fromElementByClassAlias.entrySet().iterator();
+ while ( itr.hasNext() ) {
+ Map.Entry entry = ( Map.Entry ) itr.next();
+ String alias = ( String ) entry.getKey();
+ if ( alias.equalsIgnoreCase( specifiedAlias ) ) {
+ return ( FromElement ) entry.getValue();
+ }
+ }
+ return null;
+ }
+
/**
* Convenience method to check whether a given token represents a from-element alias.
*
@@ -117,7 +132,7 @@
* from this point in the query graph.
*/
public boolean isFromElementAlias(String possibleAlias) {
- boolean isAlias = fromElementByClassAlias.containsKey( possibleAlias );
+ boolean isAlias = containsClassAlias( possibleAlias );
if ( !isAlias && parentFromClause != null ) {
// try the parent FromClause...
isAlias = parentFromClause.isFromElementAlias( possibleAlias );
@@ -227,7 +242,11 @@
* @return true if the from node contains the class alias name.
*/
public boolean containsClassAlias(String alias) {
- return fromElementByClassAlias.keySet().contains( alias );
+ boolean isAlias = fromElementByClassAlias.containsKey( alias );
+ if ( !isAlias && getSessionFactoryHelper().isStrictJPAQLComplianceEnabled() ) {
+ isAlias = findIntendedAliasedFromElementBasedOnCrazyJPARequirements( alias ) != null;
+ }
+ return isAlias;
}
/**
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/ql/JPAQLComplianceTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/ql/JPAQLComplianceTest.java 2006-07-26 18:01:49 UTC (rev 10172)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/ql/JPAQLComplianceTest.java 2006-07-26 18:04:07 UTC (rev 10173)
@@ -19,6 +19,7 @@
public static Test suite() {
return new TestSuite( JPAQLComplianceTest.class );
}
+
public void testAliasNameSameAsUnqualifiedEntityName() {
Session s = openSession();
s.beginTransaction();
@@ -39,4 +40,16 @@
}
s.close();
}
+
+ public void testIdentifierCaseSensitive() throws Exception {
+ Session s = openSession( );
+ s.createQuery( "select object(I) from Item i").list();
+ s.close();
+ }
+
+ public void testSelectWithDistinctClause() {
+ Session s = openSession();
+ s.createQuery( "select c FROM Item c WHERE c.parts IS EMPTY" ).list();
+ s.close();
+ }
}
|