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 2010/03/03 19:45:37 UTC
svn commit: r918621 - in /openjpa/branches/1.3.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java
Author: faywang
Date: Wed Mar 3 18:45:37 2010
New Revision: 918621
URL: http://svn.apache.org/viewvc?rev=918621&view=rev
Log:
OPENJPA-1547: fix SQL syntax error for JPQL involved Not IN (subquery with Member of)
Modified:
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java?rev=918621&r1=918620&r2=918621&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/JDBCExpressionFactory.java Wed Mar 3 18:45:37 2010
@@ -166,7 +166,8 @@
}
public Expression not(Expression exp) {
- if (!(exp instanceof IsNotEmptyExpression) &&
+ if (!(exp instanceof IsNotEmptyExpression) &&
+ !(exp instanceof InSubQExpression) &&
HasContainsExpressionVisitor.hasContains(exp))
return new NotContainsExpression((Exp) exp);
return new NotExpression((Exp) exp);
Modified: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java?rev=918621&r1=918620&r2=918621&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java (original)
+++ openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/subquery/TestJPQLSubquery.java Wed Mar 3 18:45:37 2010
@@ -1171,6 +1171,20 @@
executeAndCompareSQL(jpql, expectedSQL);
}
+ public void testNotInSubqueryWithMemberOf() {
+ String jpql = "SELECT c.balanceOwed FROM Customer c WHERE c.name not in "
+ + "(select cu.name FROM CompUser cu where ?1 MEMBER OF cu.nicknames)";
+ String expectedSQL = "SELECT t0.balanceOwed FROM CR_CUST t0 WHERE (NOT (t0.name IN " +
+ "(SELECT t1.name FROM CR_COMPUSER t1 INNER JOIN CR_COMPUSER_nicknames t2 " +
+ "ON t1.userid = t2.COMPUSER_USERID WHERE (t2.element = ?))))";
+
+ EntityManager em = emf.createEntityManager();
+ Query jQ = em.createQuery(jpql);
+ jQ.setParameter(1, "nickName1");
+
+ executeQueryAndCompareSQL(jQ, jpql, expectedSQL);
+ }
+
void executeQueryAndCompareSQL(Query q, String jpql, String expectedSQL) {
JDBCConfiguration conf = (JDBCConfiguration) emf.getConfiguration();
DBDictionary dict = conf.getDBDictionaryInstance();