You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/07/18 01:02:57 UTC
svn commit: r795265 - in
/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria:
CriteriaTest.java TestJPQLSubquery.java TestSubqueries.java
TestTypeSafeCondExpression.java TestTypesafeCriteria.java
Author: faywang
Date: Fri Jul 17 23:02:57 2009
New Revision: 795265
URL: http://svn.apache.org/viewvc?rev=795265&view=rev
Log:
OPENJPA-1143: further clean up test cases
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestSubqueries.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java?rev=795265&r1=795264&r2=795265&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java Fri Jul 17 23:02:57 2009
@@ -252,14 +252,39 @@
for (int i = 0; i < jSQL.size(); i++) {
if (!jSQL.get(i).equals(expectedSQL)) {
- printSQL("SQL for JPQL", jSQL);
- printSQL("Expected SQL", cSQL);
+ printSQL("SQL for JPQL", jSQL.get(i));
+ printSQL("Expected SQL", cSQL.get(i));
assertEquals(i + "-th Expected SQL and SQL for JPQL: " + jpql + " are different",
expectedSQL, jSQL.get(i));
}
}
}
+ void executeAndCompareSQL(Query jQ, String expectedSQL) {
+ List<String> jSQL = null;
+ try {
+ jSQL = executeQueryAndCollectSQL(jQ);
+ } catch (Exception e) {
+ StringWriter w = new StringWriter();
+ e.printStackTrace(new PrintWriter(w));
+ }
+
+ printSQL("Expected SQL", expectedSQL);
+ String jSql = jSQL.get(0).trim();
+ if (jSql.indexOf("optimize for 1 row") != -1)
+ jSql = jSql.substring(0, jSql.indexOf("optimize for 1 row")).trim();
+
+ if (!jSql.equals(expectedSQL)) {
+ printSQL("SQL for JPQL", jSql);
+ assertEquals(expectedSQL, jSql);
+ }
+ }
+
+ void printSQL(String header, String sql) {
+ System.err.println(header);
+ System.err.println(sql);
+ }
+
void printSQL(String header, List<String> sqls) {
System.err.println(header);
for (int i = 0; sqls != null && i < sqls.size(); i++) {
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java?rev=795265&r1=795264&r2=795265&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java Fri Jul 17 23:02:57 2009
@@ -21,14 +21,14 @@
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
-import java.util.List;
-
+import javax.persistence.Parameter;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.ListJoin;
+import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.SetJoin;
import javax.persistence.criteria.Subquery;
@@ -1230,7 +1230,8 @@
assertEquivalence(q, jpql);
}
- public void xtestSubquery18() {
+ @AllowFailure(message="can not compare timestamp")
+ public void testSubquery18() {
String jpql = "select o.id from Order o where o.orderTs >"
+ " (select CURRENT_TIMESTAMP from o.lineItems i)";
@@ -1471,11 +1472,7 @@
assertEquivalence(q, jpql);
}
- /**
- * this test scenario must use Dependent.java and DependentId.java in
- * org.apache.openjpa.persistence.query package.
- */
- @AllowFailure(message="")
+ @AllowFailure(message="can not compare timestamp")
public void testSubSelectMaxDateRange() {
String jpql = "SELECT e,d from Employee e, Dependent d "
+ "WHERE e.empId = :empid "
@@ -1493,7 +1490,27 @@
jQ.setParameter("minDate", new Date(100));
jQ.setParameter("maxDate", new Date(100000));
- List jList = jQ.getResultList();
+ executeAndCompareSQL(jQ, expectedSQL);
+
+ CriteriaQuery<?> q = cb.createQuery();
+ Root<Employee> e = q.from(Employee.class);
+ Root<Dependent> d = q.from(Dependent.class);
+ q.multiselect(e, d);
+ Parameter<Integer> empid = cb.parameter(Integer.class, "empid");
+ Parameter<Date> minDate = cb.parameter(Date.class, "minDate");
+ Parameter<Date> maxDate = cb.parameter(Date.class, "maxDate");
+
+ Subquery<Integer> sq = q.subquery(Integer.class);
+ Root<Employee> e2 = sq.from(Employee.class);
+ sq.select(cb.max(e2.get(Employee_.empId)));
+ Predicate p1 = cb.equal(e.get(Employee_.empId), empid);
+ Predicate p2 = cb.equal(d.get(Dependent_.id).get(DependentId_.empid), sq);
+ //Predicate p3 = cb.gt(d.get(Dependent_.id).get(DependentId_.effDate), minDate);
+ //Predicate p4 = cb.lt(d.get(Dependent_.id).get(DependentId_.effDate), maxDate);
+
+ //q.where(cb.and(cb.and(cb.and(p1, p2), p3), p4));
+ assertEquivalence(q, jpql);
+
}
public void testCorrelatedNestedSubquery1() {
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestSubqueries.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestSubqueries.java?rev=795265&r1=795264&r2=795265&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestSubqueries.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestSubqueries.java Fri Jul 17 23:02:57 2009
@@ -30,6 +30,8 @@
import javax.persistence.criteria.SetJoin;
import javax.persistence.criteria.Subquery;
+import org.apache.openjpa.persistence.test.AllowFailure;
+
public class TestSubqueries extends CriteriaTest {
public void testExist() {
@@ -448,8 +450,8 @@
assertEquivalence(q, query);
}
-
- public void xtestSubquery18() {
+ @AllowFailure(message="can not compare timestamp")
+ public void testSubquery18() {
String query = "select o.id from Order o where o.orderTs >"
+ " (select CURRENT_TIMESTAMP from o.lineItems i)";
@@ -587,22 +589,4 @@
Customer.CreditRating.POOR))));
assertEquivalence(q, query);
}
-
- /**
- * Verify a sub query can contain MAX and additional date comparisons
- * without losing the correct alias information. This sort of query
- * originally caused problems for DBDictionaries which used DATABASE syntax.
- */
- // Not sure how to do Cartesian join when Employee can not
- // navigate to Dependent
-
- public void testSubSelectMaxDateRange() {
- String query = "SELECT e,d from Employee e, Dependent d "
- + "WHERE e.empId = :empid "
- + "AND d.id.empid = (SELECT MAX (e2.empId) FROM Employee e2) "
- + "AND d.id.effDate > :minDate "
- + "AND d.id.effDate < :maxDate ";
- }
-
-
}
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java?rev=795265&r1=795264&r2=795265&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java Fri Jul 17 23:02:57 2009
@@ -192,19 +192,15 @@
assertEquivalence(cq, query);
}
- @AllowFailure(message = "SQL generation is slightly different")
-
public void testIsEmptyExprUsingCriteria() {
String query = "SELECT o.name FROM CompUser o WHERE o.nicknames IS NOT EMPTY";
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<CompUser> o = cq.from(CompUser.class);
cq.select(o.get(CompUser_.name));
- cq.where(cb.isNotEmpty(o.get(CompUser_.nicknames)));
+ cq.where(cb.isEmpty(o.get(CompUser_.nicknames)).negate());
assertEquivalence(cq, query);
}
-
-
public void testConstructorExprUsingCriteria() {
String query = "SELECT NEW org.apache.openjpa.persistence.criteria.MaleUser(" +
@@ -397,7 +393,7 @@
assertEquivalence(q, query);
}
- @AllowFailure
+ @AllowFailure(message="can not parameterize the literial in math function")
public void testArithmFunc3() {
String query = "select MOD(e.age, 4) From CompUser e WHERE e.name='Seetha'";
@@ -525,14 +521,13 @@
assertEquivalence(q, query, new String[]{"t"}, new Class[]{MaleUser.class});
}
- @AllowFailure(message="cross join is not implemented")
public void testTypeExpression3() {
String query = "SELECT e, FemaleUser, a FROM Address a, FemaleUser e where e.address IS NOT NULL";
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<Address> a = q.from(Address.class);
Root<FemaleUser> e = q.from(FemaleUser.class);
- q.multiselect(e, cb.literal(FemaleUser.class), e.get(CompUser_.address));
+ q.multiselect(e, cb.literal(FemaleUser.class), a);
q.where(e.get(FemaleUser_.address).isNotNull());
assertEquivalence(q, query);
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java?rev=795265&r1=795264&r2=795265&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java Fri Jul 17 23:02:57 2009
@@ -541,7 +541,6 @@
new Object[] { 1, "test" });
}
- @AllowFailure(message="collection valued parameter does not work in in()")
public void testParameters5() {
String jpql = "SELECT c FROM Customer c Where c.status IN (:coll)";
@@ -759,7 +758,6 @@
assertEquivalence(q, jpql);
}
- @AllowFailure(message="incorrect SQL generated by criteria API")
public void testOrdering3() {
String jpql = "SELECT o.quantity, o.totalCost * 1.08 AS taxedCost, "
+ "a.zipCode FROM Customer c JOIN c.orders o JOIN c.address a "