You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/06/22 09:50:28 UTC

svn commit: r549746 - in /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src: main/java/org/apache/cayenne/access/jdbc/ test/java/org/apache/cayenne/access/ test/java/org/apache/cayenne/access/jdbc/

Author: aadamchik
Date: Fri Jun 22 00:50:24 2007
New Revision: 549746

URL: http://svn.apache.org/viewvc?view=rev&rev=549746
Log:
CAY-452 EJB QL Cayenne Query
1. = NULL handling

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLIsNullTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java?view=diff&rev=549746&r1=549745&r2=549746
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLConditionTranslator.java Fri Jun 22 00:50:24 2007
@@ -355,6 +355,11 @@
             }
         }
 
-        context.append(" #bind($").append(boundName).append(")");
+        if (object != null) {
+            context.append(" #bind($").append(boundName).append(")");
+        }
+        else {
+            context.append(" NULL");
+        }
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLIsNullTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLIsNullTest.java?view=diff&rev=549746&r1=549745&r2=549746
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLIsNullTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLIsNullTest.java Fri Jun 22 00:50:24 2007
@@ -26,6 +26,19 @@
 import org.apache.cayenne.unit.CayenneCase;
 
 public class DataContextEJBQLIsNullTest extends CayenneCase {
+    
+    public void testCompareToNull() throws Exception {
+        deleteTestData();
+        createTestData("prepare");
+
+        String ejbql1 = "SELECT p FROM Painting p WHERE p.estimatedPrice = :x";
+        EJBQLQuery query1 = new EJBQLQuery(ejbql1);
+        query1.setParameter("x", null);
+
+        // unlike SelectQuery or SQLTemplate, EJBQL nulls are handled just like SQL.
+        List results = createDataContext().performQuery(query1);
+        assertEquals(0, results.size());
+    }
 
     public void testIsNull() throws Exception {
         deleteTestData();

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java?view=diff&rev=549746&r1=549745&r2=549746
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslatorTest.java Fri Jun 22 00:50:24 2007
@@ -19,6 +19,8 @@
 package org.apache.cayenne.access.jdbc;
 
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.cayenne.ejbql.EJBQLCompiledExpression;
 import org.apache.cayenne.ejbql.EJBQLParser;
@@ -29,13 +31,15 @@
 public class EJBQLSelectTranslatorTest extends CayenneCase {
 
     private SQLTemplate translateSelect(String ejbql) {
+        return translateSelect(ejbql, Collections.EMPTY_MAP);
+    }
+
+    private SQLTemplate translateSelect(String ejbql, Map parameters) {
         EJBQLParser parser = EJBQLParserFactory.getParser();
         EJBQLCompiledExpression select = parser.compile(ejbql, getDomain()
                 .getEntityResolver());
 
-        EJBQLTranslationContext tr = new EJBQLTranslationContext(
-                select,
-                Collections.EMPTY_MAP);
+        EJBQLTranslationContext tr = new EJBQLTranslationContext(select, parameters);
         select.getExpression().visit(new EJBQLSelectTranslator(tr));
         return tr.getQuery();
     }
@@ -213,7 +217,12 @@
     }
 
     public void testSelectPositionalParameters() {
-        SQLTemplate query = translateSelect("select a from Artist a where a.artistName = ?1 or a.artistName = ?2");
+        Map params = new HashMap();
+        params.put(new Integer(1), "X");
+        params.put(new Integer(2), "Y");
+        SQLTemplate query = translateSelect(
+                "select a from Artist a where a.artistName = ?1 or a.artistName = ?2",
+                params);
         String sql = query.getDefaultTemplate();
 
         assertTrue(sql, sql.startsWith("SELECT "));