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 2008/09/12 22:01:14 UTC
svn commit: r694790 - in
/openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence:
EntityManagerImpl.java QueryImpl.java
Author: ppoddar
Date: Fri Sep 12 13:01:14 2008
New Revision: 694790
URL: http://svn.apache.org/viewvc?rev=694790&view=rev
Log:
Support createNamedQuery() for prepared query cacheing
Modified:
openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
Modified: openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=694790&r1=694789&r2=694790&view=diff
==============================================================================
--- openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java (original)
+++ openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java Fri Sep 12 13:01:14 2008
@@ -905,12 +905,25 @@
QueryMetaData meta = _broker.getConfiguration().
getMetaDataRepositoryInstance().getQueryMetaData(null, name,
_broker.getClassLoader(), true);
- org.apache.openjpa.kernel.Query del =
- _broker.newQuery(meta.getLanguage(), null);
- meta.setInto(del);
- del.compile();
-
- OpenJPAQuery q = new QueryImpl(this, _ret, del);
+ String query = null;
+ String language = meta.getLanguage();
+ String qid = meta.getQueryString();
+
+ PreparedQuery cached = getPreparedQuery(qid);
+ if (cached != null) {
+ language = QueryLanguages.LANG_PREPARED_SQL;
+ query = cached.getDatastoreAction();
+ }
+ org.apache.openjpa.kernel.Query del = _broker.newQuery(language,
+ query);
+ if (cached != null) {
+ cached.setInto(del);
+ } else {
+ meta.setInto(del);
+ }
+ del.compile();
+
+ OpenJPAQuery q = new QueryImpl(this, _ret, del).setId(qid);
String[] hints = meta.getHintKeys();
Object[] values = meta.getHintValues();
for (int i = 0; i < hints.length; i++)
Modified: openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=694790&r1=694789&r2=694790&view=diff
==============================================================================
--- openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ openjpa/branches/sql-cache/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Fri Sep 12 13:01:14 2008
@@ -71,8 +71,7 @@
private DelegatingQuery _query;
private transient EntityManagerImpl _em;
private transient FetchPlan _fetch;
- private ParameterMap _params;
- private transient Boolean _cacheable = null;
+ private transient ParameterMap _params;
private String _id;
@@ -631,8 +630,12 @@
if (cached == null)
return;
Broker broker = _em.getBroker();
+ // Critical assumption: Only JPQL queries are cached and more
+ // importantly, the identifier of the prepared query is the original
+ // JPQL String
String JPQL = JPQLParser.LANG_JPQL;
String jpql = _id;
+
org.apache.openjpa.kernel.Query newQuery = broker.newQuery(JPQL, jpql);
newQuery.getFetchConfiguration().copy(_query.getFetchConfiguration());
newQuery.compile();