You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2007/11/17 07:38:36 UTC
svn commit: r595912 - in /openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/
openjpa-persistence-jdbc/src/test...
Author: pcl
Date: Fri Nov 16 22:38:33 2007
New Revision: 595912
URL: http://svn.apache.org/viewvc?rev=595912&view=rev
Log:
OPENJPA-200
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fields/TestEnumsInJPQL.java
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=595912&r1=595911&r2=595912&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Fri Nov 16 22:38:33 2007
@@ -85,6 +85,7 @@
import org.apache.openjpa.jdbc.schema.Table;
import org.apache.openjpa.jdbc.schema.Unique;
import org.apache.openjpa.kernel.Filters;
+import org.apache.openjpa.kernel.exps.Path;
import org.apache.openjpa.lib.conf.Configurable;
import org.apache.openjpa.lib.conf.Configuration;
import org.apache.openjpa.lib.jdbc.ConnectionDecorator;
@@ -95,13 +96,13 @@
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.util.GeneralException;
import org.apache.openjpa.util.InternalException;
+import org.apache.openjpa.util.InvalidStateException;
import org.apache.openjpa.util.OpenJPAException;
import org.apache.openjpa.util.ReferentialIntegrityException;
import org.apache.openjpa.util.Serialization;
import org.apache.openjpa.util.StoreException;
import org.apache.openjpa.util.UnsupportedException;
import org.apache.openjpa.util.UserException;
-import org.apache.openjpa.util.InvalidStateException;
import serp.util.Numbers;
import serp.util.Strings;
@@ -1897,7 +1898,8 @@
for (Iterator i = updateParams.entrySet().iterator(); i.hasNext();) {
Map.Entry next = (Map.Entry) i.next();
- FieldMapping fmd = (FieldMapping) next.getKey();
+ Path path = (Path) next.getKey();
+ FieldMapping fmd = (FieldMapping) path.last();
if (fmd.isVersion())
augmentUpdates = false;
@@ -1909,7 +1911,9 @@
sql.append(" = ");
ExpState state = val.initialize(sel, ctx, 0);
- val.calculateValue(sel, ctx, state, null, null);
+ // JDBC Paths are always PCPaths; PCPath implements Val
+ ExpState pathState = ((Val) path).initialize(sel, ctx, 0);
+ val.calculateValue(sel, ctx, state, (Val) path, pathState);
// append the value with a null for the Select; i
// indicates that the
@@ -1922,9 +1926,9 @@
}
if (augmentUpdates) {
- ClassMapping meta =
- ((FieldMapping) updateParams.keySet().iterator().next())
- .getDeclaringMapping();
+ Path path = (Path) updateParams.keySet().iterator().next();
+ FieldMapping fm = (FieldMapping) path.last();
+ ClassMapping meta = fm.getDeclaringMapping();
Map updates = meta.getVersion().getBulkUpdateValues();
for (Iterator iter = updates.entrySet().iterator();
iter.hasNext(); ) {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java?rev=595912&r1=595911&r2=595912&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java Fri Nov 16 22:38:33 2007
@@ -83,10 +83,10 @@
/**
* Add an update.
*/
- public void putUpdate(FieldMetaData fmd, Value val) {
+ public void putUpdate(Path path, Value val) {
if (updates == Collections.EMPTY_MAP)
updates = new HashMap();
- updates.put(fmd, val);
+ updates.put(path, val);
}
/**
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=595912&r1=595911&r2=595912&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Fri Nov 16 22:38:33 2007
@@ -467,9 +467,9 @@
// handle SET field = value
JPQLNode[] nodes = root().findChildrenByID(JJTUPDATEITEM);
for (int i = 0; nodes != null && i < nodes.length; i++) {
- FieldMetaData field = getPath(firstChild(nodes[i])).last();
+ Path path = getPath(firstChild(nodes[i]));
Value val = getValue(onlyChild(lastChild(nodes[i])));
- exps.putUpdate(field, val);
+ exps.putUpdate(path, val);
}
}
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fields/TestEnumsInJPQL.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fields/TestEnumsInJPQL.java?rev=595912&r1=595911&r2=595912&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fields/TestEnumsInJPQL.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fields/TestEnumsInJPQL.java Fri Nov 16 22:38:33 2007
@@ -39,29 +39,45 @@
public void testEnumLiteralInSelect() {
Query q = em.createQuery("select count(o) from EnumFieldType o where " +
- "o.enumField = org.apache.openjpa.persistence.fields.SampleEnum.BAR");
+ "o.enumField = " +
+ "org.apache.openjpa.persistence.fields.SampleEnum.BAR");
assertEquals(1, ((Number) q.getSingleResult()).intValue());
}
- // fails currently
- public void xtestEnumLiteralInUpdate() {
+ public void testEnumLiteralInSetInUpdate() {
testEnumLiteralInSelect();
em.getTransaction().begin();
Query q = em.createQuery("update EnumFieldType o set " +
- "o.enumField = org.apache.openjpa.persistence.fields.SampleEnum.BAZ");
+ "o.enumField = " +
+ "org.apache.openjpa.persistence.fields.SampleEnum.BAZ");
assertEquals(1, ((Number) q.executeUpdate()).intValue());
em.getTransaction().commit();
- postUpdateCheck();
+ postUpdateCheck(true);
}
- private void postUpdateCheck() {
+ public void testEnumLiteralInWhereInUpdate() {
+ testEnumLiteralInSelect();
+ em.getTransaction().begin();
+ Query q = em.createQuery("update EnumFieldType o set o.intField = 3 " +
+ "where o.enumField = " +
+ "org.apache.openjpa.persistence.fields.SampleEnum.BAR");
+ assertEquals(1, ((Number) q.executeUpdate()).intValue());
+ em.getTransaction().commit();
+ postUpdateCheck(false);
+ }
+
+ private void postUpdateCheck(boolean wasEnumModified) {
Query q = em.createQuery("select count(o) from EnumFieldType o where " +
- "o.enumField = org.apache.openjpa.persistence.fields.SampleEnum.BAR");
- assertEquals(0, ((Number) q.getSingleResult()).intValue());
+ "o.enumField = " +
+ "org.apache.openjpa.persistence.fields.SampleEnum.BAR");
+ assertEquals(wasEnumModified ? 0 : 1,
+ ((Number) q.getSingleResult()).intValue());
q = em.createQuery("select count(o) from EnumFieldType o where " +
- "o.enumField = org.apache.openjpa.persistence.fields.SampleEnum.BAZ");
- assertEquals(1, ((Number) q.getSingleResult()).intValue());
+ "o.enumField = " +
+ "org.apache.openjpa.persistence.fields.SampleEnum.BAZ");
+ assertEquals(wasEnumModified ? 1 : 0,
+ ((Number) q.getSingleResult()).intValue());
}
public void testEnumPositionalParamInSelect() {
@@ -78,15 +94,25 @@
assertEquals(1, ((Number) q.getSingleResult()).intValue());
}
- // fails currently
- public void xtestEnumParamInUpdate() {
+ public void testEnumParamInSetInUpdate() {
testEnumLiteralInSelect();
em.getTransaction().begin();
Query q = em.createQuery("update EnumFieldType o set o.enumField = :e");
q.setParameter("e", SampleEnum.BAZ);
assertEquals(1, ((Number) q.executeUpdate()).intValue());
em.getTransaction().commit();
- postUpdateCheck();
+ postUpdateCheck(true);
+ }
+
+ public void testEnumParamInWhereInUpdate() {
+ testEnumLiteralInSelect();
+ em.getTransaction().begin();
+ Query q = em.createQuery("update EnumFieldType o set o.intField = 3 " +
+ "where o.enumField = :e");
+ q.setParameter("e", SampleEnum.BAR);
+ assertEquals(1, ((Number) q.executeUpdate()).intValue());
+ em.getTransaction().commit();
+ postUpdateCheck(false);
}
public void xtestInMemory() {