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/29 02:30:43 UTC
svn commit: r798735 [1/3] - in /openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/per...
Author: faywang
Date: Wed Jul 29 00:30:41 2009
New Revision: 798735
URL: http://svn.apache.org/viewvc?rev=798735&view=rev
Log:
OPENJPA-1143: embeddable test case and support for Criteria
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Company1_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Company2_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Department1_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Department2_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Department3_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Division_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Integer_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Embed_ToMany_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_MappedToOne_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_ToMany_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_ToOne_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Employee1_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Employee2_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Employee3_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EmployeeName3_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EmployeePK2_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Coll_Embed_Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Coll_Embed_ToOne_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Coll_String_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Integer_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Embed_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Embed_ToMany_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_MappedToOne_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_ToMany_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_ToOne_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityB1_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item2_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item3_.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/VicePresident_.java (with props)
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java
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/embed/Book.java (contents, props changed)
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Joins.java
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java?rev=798735&r1=798734&r2=798735&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java Wed Jul 29 00:30:41 2009
@@ -73,6 +73,12 @@
if (direct && ((Const) _val2).getValue(ctx, s2) == null)
flags1 = Val.NULL_CMP;
}
+
+ if (_val1 instanceof PCPath && _val2 instanceof PCPath &&
+ (((PCPath)_val1).isSubqueryPath() || ((PCPath)_val2).isSubqueryPath())) {
+ flags1 = flags1 | Val.CMP_EQUAL;
+ flags2 = flags2 | Val.CMP_EQUAL;
+ }
if (s1 == null)
s1 = _val1.initialize(sel, ctx, flags1);
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java?rev=798735&r1=798734&r2=798735&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java Wed Jul 29 00:30:41 2009
@@ -313,14 +313,15 @@
case JavaTypes.ARRAY:
case JavaTypes.COLLECTION:
ValueMapping elem = pstate.field.getElementMapping();
- if (pstate.field.isElementCollection() &&
- pstate.field.getElement().isEmbedded()) {
+ if (pstate.field.isElementCollection() && pstate.field.getElement().isEmbedded()) {
Strategy strategy = pstate.field.getStrategy();
- if (strategy instanceof
- HandlerCollectionTableFieldStrategy)
- return ((HandlerCollectionTableFieldStrategy)
- strategy).getElementColumns(
- elem.getTypeMapping());
+ if (strategy instanceof HandlerCollectionTableFieldStrategy) {
+ if (pstate.compareEqual)
+ return pstate.field.getJoinForeignKey().getColumns();
+ return ((HandlerCollectionTableFieldStrategy) strategy).
+ getElementColumns(elem.getTypeMapping());
+
+ }
}
if (pstate.joinedRel && elem.getTypeCode() == JavaTypes.PC)
return elem.getTypeMapping().getPrimaryKeyColumns();
@@ -473,6 +474,7 @@
public ExpState initialize(Select sel, ExpContext ctx, int flags) {
PathExpState pstate = new PathExpState(sel.newJoins());
+ pstate.compareEqual = (flags & Val.CMP_EQUAL) != 0 ? true : false;
boolean key = false;
boolean forceOuter = false;
ClassMapping rel = _candidate;
@@ -743,7 +745,8 @@
public Column[] cols = null;
public boolean joinedRel = false;
public boolean isEmbedElementColl = false;
-
+ public boolean compareEqual = false;
+
public PathExpState(Joins joins) {
super(joins);
}
@@ -1039,6 +1042,13 @@
else
pstate.field.appendIsNotNull(sql, sel, pstate.joins);
}
+
+ public boolean isSubqueryPath() {
+ if (_actions != null && _actions.size() == 1 &&
+ ((Action)_actions.get(0)).op == Action.SUBQUERY)
+ return true;
+ return false;
+ }
public int hashCode() {
if (_actions == null)
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java?rev=798735&r1=798734&r2=798735&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Val.java Wed Jul 29 00:30:41 2009
@@ -51,6 +51,12 @@
*/
public final int FORCE_OUTER = 2 << 2;
+ /**
+ * Initialization flag indicating to this value is for compare/equal
+ * path.
+ */
+ public final int CMP_EQUAL = 2 << 3;
+
public final int VAL = 0;
public final int MATH_VAL = 1;
public final int CONCAT_VAL = 2;
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=798735&r1=798734&r2=798735&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 Wed Jul 29 00:30:41 2009
@@ -99,7 +99,42 @@
Student.class,
TransactionHistory.class,
Transaction.class,
- VideoStore.class};
+ VideoStore.class,
+ org.apache.openjpa.persistence.embed.Company1.class,
+ org.apache.openjpa.persistence.embed.Company2.class,
+ org.apache.openjpa.persistence.embed.Department1.class,
+ org.apache.openjpa.persistence.embed.Department2.class,
+ org.apache.openjpa.persistence.embed.Department3.class,
+ org.apache.openjpa.persistence.embed.Division.class,
+ org.apache.openjpa.persistence.embed.Embed.class,
+ org.apache.openjpa.persistence.embed.Embed_Coll_Embed.class,
+ org.apache.openjpa.persistence.embed.Embed_Coll_Integer.class,
+ org.apache.openjpa.persistence.embed.Embed_Embed.class,
+ org.apache.openjpa.persistence.embed.Embed_Embed_ToMany.class,
+ org.apache.openjpa.persistence.embed.Embed_MappedToOne.class,
+ org.apache.openjpa.persistence.embed.Embed_ToMany.class,
+ org.apache.openjpa.persistence.embed.Embed_ToOne.class,
+ org.apache.openjpa.persistence.embed.Employee1.class,
+ org.apache.openjpa.persistence.embed.Employee2.class,
+ org.apache.openjpa.persistence.embed.Employee3.class,
+ org.apache.openjpa.persistence.embed.EmployeeName3.class,
+ org.apache.openjpa.persistence.embed.EmployeePK2.class,
+ org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_Embed.class,
+ org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_ToOne.class,
+ org.apache.openjpa.persistence.embed.EntityA_Coll_String.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Embed.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Integer.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_Embed.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_Embed_ToMany.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_MappedToOne.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_ToMany.class,
+ org.apache.openjpa.persistence.embed.EntityA_Embed_ToOne.class,
+ org.apache.openjpa.persistence.embed.EntityB1.class,
+ org.apache.openjpa.persistence.embed.Item1.class,
+ org.apache.openjpa.persistence.embed.Item2.class,
+ org.apache.openjpa.persistence.embed.Item3.class,
+ org.apache.openjpa.persistence.embed.VicePresident.class
+ };
protected Class[] getDomainClasses() {
return CLASSES;
@@ -291,6 +326,58 @@
}
}
+ void executeExpectFail(CriteriaQuery<?> c, String jpql) {
+ List<String> cSQL = null;
+ StringWriter w = new StringWriter();
+ try {
+ Query cQ = em.createQuery(c);
+ cSQL = executeQueryAndCollectSQL(cQ);
+ fail("CriteriaQuery corresponding to " + jpql + " is expected to fail\r\n" + w);
+ } catch (Exception e) {
+ e.printStackTrace(new PrintWriter(w));
+ }
+ }
+
+ void executeExpectFail(CriteriaQuery<?> c, String jpql, String[] paramNames, Object[] params) {
+ List<String> cSQL = null;
+ StringWriter w = new StringWriter();
+ try {
+ Query cQ = em.createQuery(c);
+ for (int i = 0; i < params.length; i++)
+ cQ.setParameter(paramNames[i], params[i]);
+ cSQL = executeQueryAndCollectSQL(cQ);
+ fail("CriteriaQuery corresponding to " + jpql + " is expected to fail\r\n" + w);
+ } catch (Exception e) {
+ e.printStackTrace(new PrintWriter(w));
+ }
+ }
+
+ void executeExpectFail(String jpql) {
+ List<String> jSQL = null;
+ StringWriter w = new StringWriter();
+ try {
+ Query jQ = em.createQuery(jpql);
+ jSQL = executeQueryAndCollectSQL(jQ);
+ fail("JPQL " + jpql + " is expected to Failed to execute\r\n" + w);
+ } catch (Exception e) {
+ e.printStackTrace(new PrintWriter(w));
+ }
+ }
+
+ void executeExpectFail(String jpql, String[] paramNames, Object[] params) {
+ List<String> jSQL = null;
+ StringWriter w = new StringWriter();
+ try {
+ Query jQ = em.createQuery(jpql);
+ for (int i = 0; i < params.length; i++)
+ jQ.setParameter(paramNames[i], params[i]);
+ jSQL = executeQueryAndCollectSQL(jQ);
+ fail("JPQL " + jpql + " is expected to Failed to execute\r\n" + w);
+ } catch (Exception e) {
+ e.printStackTrace(new PrintWriter(w));
+ }
+ }
+
void printSQL(String header, String sql) {
System.err.println(header);
System.err.println(sql);