You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/12/11 03:26:14 UTC

svn commit: r889490 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/

Author: ppoddar
Date: Fri Dec 11 02:26:13 2009
New Revision: 889490

URL: http://svn.apache.org/viewvc?rev=889490&view=rev
Log:
OPENJPA-1425:  Lieralize value if they appear in selection clause for databases that do not support parameters in selection terms.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java?rev=889490&r1=889489&r2=889490&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java Fri Dec 11 02:26:13 2009
@@ -228,6 +228,9 @@
             Val resultVal;
             for (int i = 0; i < exps.projections.length; i++) {
                 resultVal = (Val) exps.projections[i];
+                if (!ctx.store.getDBDictionary().supportsParameterInSelect && resultVal instanceof Lit) {
+                    ((Lit)resultVal).setRaw(true);
+                }
                 // have to join through to related type for pc object 
                 // projections; this ensures that we have all our joins cached
                 state.projections[i] = resultVal.initialize(sel, ctx, 

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=889490&r1=889489&r2=889490&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 Dec 11 02:26:13 2009
@@ -181,6 +181,7 @@
     public int maxIndexNameLength = 128;
     public int maxIndexesPerTable = Integer.MAX_VALUE;
     public boolean supportsForeignKeys = true;
+    public boolean supportsParameterInSelect = true;
     public boolean supportsForeignKeysComposite = true;
     public boolean supportsUniqueConstraints = true;
     public boolean supportsDeferredConstraints = true;

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java?rev=889490&r1=889489&r2=889490&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java Fri Dec 11 02:26:13 2009
@@ -25,12 +25,14 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.EntityManager;
 import javax.persistence.Parameter;
 import javax.persistence.Query;
 import javax.persistence.Tuple;
 import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Fetch;
 import javax.persistence.criteria.Join;
 import javax.persistence.criteria.JoinType;
 import javax.persistence.criteria.ListJoin;
@@ -1477,4 +1479,28 @@
         assertTrue(result.getClass() + " not instance of Time", result instanceof Time);  
         
     }
+    
+//    public void testInMemoryAccessPath() {
+//        em.getTransaction().begin();
+//        // must have new/dirty managed instances to exercise the code path
+//        em.persist(new Customer());
+//        CriteriaQuery<Customer> cquery = cb.createQuery(Customer.class);
+//        Root<Customer> customer = cquery.from(Customer.class);
+//        Fetch<Customer, Account> c = customer.fetch("accounts", JoinType.LEFT);
+//        cquery.where(cb.like(customer.<String>get("firstName"), "a%")).select(customer).distinct(true);
+//        TypedQuery<Customer> tquery = em.createQuery(cquery);
+//        tquery.setMaxResults(3);
+//        List<Customer> result = tquery.getResultList();
+//
+//    }
+    
+    public void testLiteralInProjection() {
+        String jpql = "select 'a' from Customer c where c.id=10";
+        
+        CriteriaQuery<String> cq = cb.createQuery(String.class);
+        Root<Customer> c = cq.from(Customer.class);
+        cq.select(cb.toString(cb.literal('a')));
+        cq.where(cb.equal(c.get(Customer_.id), 10));
+        assertEquivalence(cq, jpql);
+    }
 }