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);
+ }
}