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/02/01 18:34:05 UTC
svn commit: r739796 - in /openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/
Author: ppoddar
Date: Sun Feb 1 17:34:04 2009
New Revision: 739796
URL: http://svn.apache.org/viewvc?rev=739796&view=rev
Log:
OPENJPA-703: Use Prepared Query for packed results.
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestPreparedQueryCache.java
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java?rev=739796&r1=739795&r2=739796&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryImpl.java Sun Feb 1 17:34:04 2009
@@ -32,6 +32,7 @@
import org.apache.openjpa.kernel.Broker;
import org.apache.openjpa.kernel.PreparedQuery;
import org.apache.openjpa.kernel.Query;
+import org.apache.openjpa.kernel.QueryImpl;
import org.apache.openjpa.kernel.QueryLanguages;
import org.apache.openjpa.lib.rop.ResultList;
import org.apache.openjpa.util.ImplHelper;
@@ -125,23 +126,35 @@
* {@link ResultList#getUserObject() user object}.
*/
public boolean initialize(Object result) {
- boolean initialized = false;
- if (result instanceof ResultList) {
- Object provider = ((ResultList)result).getUserObject();
- if (provider instanceof SelectResultObjectProvider) {
- SelectResultObjectProvider rop =
- (SelectResultObjectProvider)provider;
- SelectExecutor selector = rop.getSelect();
- SQLBuffer buffer = selector == null ? null : selector.getSQL();
- if (buffer != null && !selector.hasMultipleSelects()) {
- setTargetQuery(buffer.getSQL());
- setParameters(buffer.getParameters());
- setUserParameterPositions(buffer.getUserParameters());
- initialized = true;
- }
- }
+ SelectExecutor selector = extractSelectExecutor(result);
+ if (selector == null)
+ return false;
+ SQLBuffer buffer = selector == null ? null : selector.getSQL();
+ if (buffer != null && !selector.hasMultipleSelects()) {
+ setTargetQuery(buffer.getSQL());
+ setParameters(buffer.getParameters());
+ setUserParameterPositions(buffer.getUserParameters());
+ return true;
}
- return initialized;
+ return false;
+ }
+
+ /**
+ * Extract the underlying SelectExecutor from the given argument, if
+ * possible.
+ */
+ private SelectExecutor extractSelectExecutor(Object result) {
+ if (result instanceof ResultList == false)
+ return null;
+ Object provider = ((ResultList)result).getUserObject();
+ if (provider instanceof QueryImpl.PackingResultObjectProvider) {
+ provider = ((QueryImpl.PackingResultObjectProvider)provider)
+ .getDelegate();
+ }
+ if (provider instanceof SelectResultObjectProvider) {
+ return ((SelectResultObjectProvider)provider).getSelect();
+ }
+ return null;
}
/**
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java?rev=739796&r1=739795&r2=739796&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryImpl.java Sun Feb 1 17:34:04 2009
@@ -1982,7 +1982,7 @@
/**
* Result object provider that packs results before returning them.
*/
- private static class PackingResultObjectProvider
+ public static class PackingResultObjectProvider
implements ResultObjectProvider {
private final ResultObjectProvider _delegate;
@@ -2045,6 +2045,10 @@
public void handleCheckedException(Exception e) {
_delegate.handleCheckedException(e);
}
+
+ public ResultObjectProvider getDelegate() {
+ return _delegate;
+ }
}
/**
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestPreparedQueryCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestPreparedQueryCache.java?rev=739796&r1=739795&r2=739796&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestPreparedQueryCache.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/sqlcache/TestPreparedQueryCache.java Sun Feb 1 17:34:04 2009
@@ -416,6 +416,15 @@
}
/**
+ * Project results are returned with different types of ROP.
+ */
+ public void testProjectionResult() {
+ String jpql = "select e.name from Employee e where e.address.city=:city";
+ Object[] params = {"city", CITY_NAMES[0]};
+ compare(!IS_NAMED_QUERY, jpql, COMPANY_NAMES.length*DEPARTMENT_NAMES.length, params);
+ }
+
+ /**
* Compare the result of execution of the same query with and without
* Prepared Query Cache.
*