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();