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/12/04 00:42:01 UTC

svn commit: r886991 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java

Author: faywang
Date: Thu Dec  3 23:42:00 2009
New Revision: 886991

URL: http://svn.apache.org/viewvc?rev=886991&view=rev
Log:
OPENJPA-1413: fix NPE when update using CASE expression on Derby

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/CompareEqualExpression.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.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=886991&r1=886990&r2=886991&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 Thu Dec  3 23:42:00 2009
@@ -106,7 +106,8 @@
         boolean val2Null = _val2 instanceof Const
             && ((Const) _val2).isSQLValueNull(sel, ctx, bstate.state2);
         appendTo(sel, ctx, bstate, buf, val1Null, val2Null);
-        sel.append(buf, state.joins);
+        if (sel != null)
+            sel.append(buf, state.joins);
     }
 
     public void selectColumns(Select sel, ExpContext ctx, ExpState state, 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java?rev=886991&r1=886990&r2=886991&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jpql/expressions/TestJPQLScalarExpressions.java Thu Dec  3 23:42:00 2009
@@ -249,22 +249,19 @@
         assertEquals("the name is not Jacob", "Jacob", result3[0]);
         assertEquals("the credit rating is not 'POOR'", "POOR", result3[1]);
 
-        /*
-        // this jpql fail with NPE in Derby. It works with DB2 
         String update2 = "update CompUser c set c.creditRating = " +
             " CASE WHEN c.name ='Jacob' THEN " +
-            "org.apache.openjpa.persistence.common.apps.CompUser$
-            CreditRating.POOR" + 
+            "org.apache.openjpa.persistence.common.apps.CompUser$CreditRating.POOR" + 
             " WHEN c.name = 'Ugo' THEN " + 
-            "org.apache.openjpa.persistence.common.apps.CompUser$
-            CreditRating.GOOD " +
+            "org.apache.openjpa.persistence.common.apps.CompUser$CreditRating.GOOD " +
             " ELSE " + 
-            "org.apache.openjpa.persistence.common.apps.CompUser$
-            CreditRating.EXCELLENT " +
+            "org.apache.openjpa.persistence.common.apps.CompUser$CreditRating.EXCELLENT " +
             " END ";
-        */
+        int updateCount = em.createQuery(update2).executeUpdate();
+        assertEquals("the result is not 6", 6, updateCount);
         
-        String update2 = "update CompUser c set c.creditRating = " +
+        
+        String update3 = "update CompUser c set c.creditRating = " +
             " CASE WHEN c.age > 30 THEN " +
             "org.apache.openjpa.persistence.common.apps." +
             "CompUser$CreditRating.POOR" + 
@@ -275,7 +272,7 @@
             "org.apache.openjpa.persistence.common.apps." +
             "CompUser$CreditRating.EXCELLENT " +
             " END "; 
-        int updateCount = em.createQuery(update2).executeUpdate();
+        updateCount = em.createQuery(update3).executeUpdate();
         assertEquals("the result is not 6", 6, updateCount);
         
         String query4 = "select e.name, e.creditRating from CompUser e " + 
@@ -300,7 +297,7 @@
             ((org.apache.openjpa.persistence.common.apps.CompUser.CreditRating)
             result4[1]).name());
         
-        String update3 = "update CompUser c set c.creditRating = " +
+        String update4 = "update CompUser c set c.creditRating = " +
             " CASE c.age WHEN 35 THEN " +
             "org.apache.openjpa.persistence.common.apps." +
             "CompUser$CreditRating.POOR" + 
@@ -311,7 +308,7 @@
             "org.apache.openjpa.persistence.common.apps." +
             "CompUser$CreditRating.EXCELLENT " +
             " END "; 
-        result = em.createQuery(update3).executeUpdate();
+        result = em.createQuery(update4).executeUpdate();
         assertEquals("the result is not 6", 6, result);
 
         // Derby fails but DB2 works