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/10/07 00:22:09 UTC
svn commit: r822528 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/
openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/
Author: fancy
Date: Tue Oct 6 22:22:09 2009
New Revision: 822528
URL: http://svn.apache.org/viewvc?rev=822528&view=rev
Log:
OPENJPA-1338 Allow comparison for VALUE(e) that maps to basic type
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
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=822528&r1=822527&r2=822528&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 Tue Oct 6 22:22:09 2009
@@ -1736,15 +1736,14 @@
if (node.id == JJTKEY)
path = (Path) factory.getKey(path);
FieldMetaData fld = path.last();
- ClassMetaData meta = node.id == JJTKEY ? meta = fld.getKey().getTypeMetaData()
- : fld.getDeclaredTypeMetaData();
+ ClassMetaData meta = fld.getKey().getTypeMetaData();
if (inWhereClause &&
- (meta != null && meta.isEmbeddable()) ||
- (fld.isElementCollection() &&
+ (node.id == JJTKEY && meta != null && fld.getKey().isEmbedded()) ||
+ (node.id == JJTVALUE && fld.isElementCollection() &&
fld.getElement().getEmbeddedMetaData() != null))
// check basic type
throw parseException(EX_USER, "bad-general-identifier",
- new Object[]{ id.text, node.id == JJTVALUE ? "VALUE" : "KEY" }, null);
+ new Object[]{ node.id == JJTVALUE ? "VALUE" : "KEY", id.text }, null);
return path;
}
Modified: openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties?rev=822528&r1=822527&r2=822528&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties (original)
+++ openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/jpql/localizer.properties Tue Oct 6 22:22:09 2009
@@ -76,7 +76,7 @@
bad-qualified-identifier: The identifier "{0}" in "{1}" operator is not \
referring to an association field of type java.util.Map.
bad-qualified-path: Attemp to navigate a basic type of Key("{0}").
-bad-general-identifier: The identitier "{0}" in "{1}" operator is not valid \
+bad-general-identifier: The "{0}({1})" is an embeddable which not allowed \
in conditional expression.
bad-predicate: JPQL query does not support conditional expression over \
embeddable class. JPQL string: "{0}".
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java?rev=822528&r1=822527&r2=822528&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java Tue Oct 6 22:22:09 2009
@@ -106,6 +106,53 @@
}
}
+ public void testGroupByEmbed() {
+ EntityManager em = emf.createEntityManager();
+ String query[] = {
+ "select a.embed from EntityA_Embed_Embed a group by a.embed",
+ "select e from EntityA_Embed_Embed a join a.embed e group by e",
+ };
+ List rs = null;
+ for (int i = 0; i < query.length; i++) {
+ try {
+ rs = em.createQuery(query[i]).getResultList();
+ } catch(ArgumentException e) {
+ ; // as expected : Group by embeddable field is not allowed
+ }
+ }
+ em.close();
+ }
+
+ public void testKeyEmbeddableCompare() {
+ EntityManager em = emf.createEntityManager();
+ String query[] = {
+ "select o from Company1 c join c.organization o where KEY(o) = ?1",
+ "select d from Department3 d join d.emps e where KEY(e) = ? 1"
+ };
+ List rs = null;
+ Division d = new Division();
+ d.setId(10);
+ d.setName("division 10");
+ EmployeeName3 name = new EmployeeName3("fname1", "lname1");
+ for (int i = 0; i < query.length; i++) {
+ switch (i) {
+ case 0:
+ // Division is an embeddable as well as an entity, comparison is allowed
+ rs = em.createQuery(query[i]).setParameter(1, d).getResultList();
+ break;
+ case 1:
+ try {
+ rs = em.createQuery(query[i]).setParameter(1, name).getResultList();
+ } catch(ArgumentException e) {
+ // as expected : compare embeddable is not allowed
+ System.out.println(e.getMessage());
+ }
+ break;
+ }
+ }
+ em.close();
+ }
+
public void testEntityA_Embed_Coll_Map() {
queryEntityA_Embed_Coll_Map();
}
@@ -120,7 +167,8 @@
for (int i = 0; i < query.length; i++) {
rs = em.createQuery(query[i]).getResultList();
em.clear();
- }
+ }
+ em.close();
}
public void testEntityA_Coll_String() {