You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/04/15 10:34:46 UTC

svn commit: r765085 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java

Author: ppoddar
Date: Wed Apr 15 08:34:45 2009
New Revision: 765085

URL: http://svn.apache.org/viewvc?rev=765085&view=rev
Log:
OPENJPA-1039: treat AND OR operators as non-associative

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java?rev=765085&r1=765084&r2=765085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java Wed Apr 15 08:34:45 2009
@@ -28,6 +28,7 @@
 import org.apache.openjpa.persistence.query.DomainObject;
 import org.apache.openjpa.persistence.query.Expression;
 import org.apache.openjpa.persistence.query.OpenJPAQueryBuilder;
+import org.apache.openjpa.persistence.query.Predicate;
 import org.apache.openjpa.persistence.query.QueryBuilderImpl;
 import org.apache.openjpa.persistence.query.QueryDefinition;
 import org.apache.openjpa.persistence.query.SelectItem;
@@ -90,6 +91,25 @@
 		// do nothing as we may not have a database connection
 	}
 	
+	public void testLogicalPredicateAssociativity() {
+		DomainObject e = qb.createQueryDefinition(Employee.class);
+		Predicate p1 = e.get("salary").greaterThan(100);
+		Predicate p2 = e.get("rating").equal(5);
+		Predicate p3 = e.get("name").like("John");
+		Predicate w1 = p1.and(p2.or(p3));
+		Predicate w2 = (p1.and(p2)).or(p3);
+		QueryDefinition q1 = e.select(e).where(w1);
+		String jpql1 = qb.toJPQL(q1);
+		emf.createEntityManager().createDynamicQuery(q1).getResultList();
+		
+		QueryDefinition q2 = e.select(e).where(w2);
+		String jpql2 = qb.toJPQL(q2);
+		System.err.println(jpql1);
+		System.err.println(jpql2);
+		assertNotEquals(jpql1, jpql2);
+		emf.createEntityManager().createDynamicQuery(q2).getResultList();
+	}
+	
 	public void testMultipleDomainOfSameClass() {
 		DomainObject o1 = qb.createQueryDefinition(Order.class);
 		DomainObject o2 = o1.addRoot(Order.class);

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java?rev=765085&r1=765084&r2=765085&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/query/LogicalPredicate.java Wed Apr 15 08:34:45 2009
@@ -52,7 +52,7 @@
 	}
 
 	public String asExpression(AliasContext ctx) {
-		return ((Visitable)_p1).asExpression(ctx) + " " + _op + " " 
-		     + ((Visitable)_p2).asExpression(ctx);
+		return OPEN_BRACE + ((Visitable)_p1).asExpression(ctx) + SPACE + _op + 
+			   SPACE + ((Visitable)_p2).asExpression(ctx) + CLOSE_BRACE;
 	}
 }