You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2008/01/20 18:24:40 UTC
svn commit: r613625 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/ main/java/org/apache/cayenne/access/
main/java/org/apache/cayenne/util/ test/java/org/apache/cayenne/access/
test/resources/dml/
Author: aadamchik
Date: Sun Jan 20 09:24:36 2008
New Revision: 613625
URL: http://svn.apache.org/viewvc?rev=613625&view=rev
Log:
CAY-967 Caching doesn't work for paginated queries
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPaginatedQueryTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextPaginatedQueryTest.xml
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContextQueryAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContextQueryAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContextQueryAction.java?rev=613625&r1=613624&r2=613625&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContextQueryAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/CayenneContextQueryAction.java Sun Jan 20 09:24:36 2008
@@ -42,25 +42,7 @@
}
@Override
- public QueryResponse execute() {
-
- if (interceptOIDQuery() != DONE) {
- if (interceptRelationshipQuery() != DONE) {
- if (interceptRefreshQuery() != DONE) {
- if (interceptLocalCache() != DONE) {
- if (interceptPaginatedQuery() != DONE) {
- runQuery();
- }
- }
- }
- }
- }
-
- interceptObjectConversion();
- return response;
- }
-
- private boolean interceptPaginatedQuery() {
+ protected boolean interceptPaginatedQuery() {
if (metadata.getPageSize() > 0) {
response = new ListResponse(new RemoteIncrementalFaultList(
actingContext,
@@ -89,7 +71,8 @@
};
}
- private boolean interceptRefreshQuery() {
+ @Override
+ protected boolean interceptRefreshQuery() {
if (query instanceof RefreshQuery) {
RefreshQuery refreshQuery = (RefreshQuery) query;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java?rev=613625&r1=613624&r2=613625&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataContextQueryAction.java Sun Jan 20 09:24:36 2008
@@ -26,7 +26,6 @@
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.PersistenceState;
import org.apache.cayenne.Persistent;
-import org.apache.cayenne.QueryResponse;
import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.query.ObjectIdQuery;
import org.apache.cayenne.query.Query;
@@ -41,8 +40,6 @@
* @since 1.2
* @author Andrus Adamchik
*/
-// TODO: Andrus, 2/2/2006 - all these DataContext extensions should become available to
-// CayenneContext as well....
class DataContextQueryAction extends ObjectContextQueryAction {
public DataContextQueryAction(DataContext actingContext, ObjectContext targetContext,
@@ -50,24 +47,6 @@
super(actingContext, targetContext, query);
}
- @Override
- public QueryResponse execute() {
- if (interceptPaginatedQuery() != DONE) {
- if (interceptOIDQuery() != DONE) {
- if (interceptRelationshipQuery() != DONE) {
- if (interceptRefreshQuery() != DONE) {
- if (interceptLocalCache() != DONE) {
- runQuery();
- }
- }
- }
- }
- }
-
- interceptObjectConversion();
- return response;
- }
-
/**
* Overrides super implementation to property handle data row fetches.
*/
@@ -104,7 +83,8 @@
return !DONE;
}
- private boolean interceptPaginatedQuery() {
+ @Override
+ protected boolean interceptPaginatedQuery() {
if (metadata.getPageSize() > 0) {
response = new ListResponse(new IncrementalFaultList(
(DataContext) actingContext,
@@ -120,7 +100,8 @@
return ((DataContext) actingContext).getQueryCache();
}
- private boolean interceptRefreshQuery() {
+ @Override
+ protected boolean interceptRefreshQuery() {
if (query instanceof RefreshQuery) {
RefreshQuery refreshQuery = (RefreshQuery) query;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java?rev=613625&r1=613624&r2=613625&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/util/ObjectContextQueryAction.java Sun Jan 20 09:24:36 2008
@@ -72,20 +72,23 @@
}
/**
- * Worker method that perfomrs internal query.
+ * Worker method that performs internal query.
*/
public QueryResponse execute() {
if (interceptOIDQuery() != DONE) {
if (interceptRelationshipQuery() != DONE) {
- if (interceptLocalCache() != DONE) {
- runQuery();
+ if (interceptRefreshQuery() != DONE) {
+ if (interceptLocalCache() != DONE) {
+ if (interceptPaginatedQuery() != DONE) {
+ runQuery();
+ }
+ }
}
}
}
interceptObjectConversion();
-
return response;
}
@@ -219,6 +222,17 @@
return !DONE;
}
+
+
+ /**
+ * @since 3.0
+ */
+ protected abstract boolean interceptPaginatedQuery();
+
+ /**
+ * @since 3.0
+ */
+ protected abstract boolean interceptRefreshQuery();
/**
* @since 3.0
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPaginatedQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPaginatedQueryTest.java?rev=613625&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPaginatedQueryTest.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataContextPaginatedQueryTest.java Sun Jan 20 09:24:36 2008
@@ -0,0 +1,59 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.access;
+
+import java.util.List;
+
+import org.apache.art.Artist;
+import org.apache.cayenne.query.Ordering;
+import org.apache.cayenne.query.QueryMetadata;
+import org.apache.cayenne.query.SelectQuery;
+import org.apache.cayenne.unit.CayenneCase;
+
+public class DataContextPaginatedQueryTest extends CayenneCase {
+
+ public void testLocalCache() throws Exception {
+ deleteTestData();
+ createTestData("testLocalCache");
+
+ DataContext context = createDataContext();
+
+ SelectQuery query = new SelectQuery(Artist.class);
+ query.addOrdering(Artist.ARTIST_NAME_PROPERTY, Ordering.ASC);
+ query.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+ query.setPageSize(5);
+
+ List<?> results1 = context.performQuery(query);
+ assertNotNull(results1);
+
+ List<?> results2 = context.performQuery(query);
+ assertNotNull(results2);
+ assertSame(results1, results2);
+
+ results1.get(1);
+ List<?> results3 = context.performQuery(query);
+ assertNotNull(results3);
+ assertSame(results1, results3);
+
+ results1.get(7);
+ List<?> results4 = context.performQuery(query);
+ assertNotNull(results4);
+ assertSame(results1, results4);
+ }
+}
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextPaginatedQueryTest.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextPaginatedQueryTest.xml?rev=613625&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextPaginatedQueryTest.xml (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/dml/access.DataContextPaginatedQueryTest.xml Sun Jan 20 09:24:36 2008
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<beans default-lazy-init="true">
+ <!-- ======================================= -->
+ <!-- Named Queries -->
+ <!-- ======================================= -->
+
+ <!-- ARTIST -->
+ <bean id="A1" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33001, 'artist1')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A2" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33002, 'artist2')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A3" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33003, 'artist3')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A4" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33004, 'artist4')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A5" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33005, 'artist5')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A6" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33006, 'artist6')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A7" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33007, 'artist7')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A8" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33008, 'artist8')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A9" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33009, 'artist9')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A10" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33010, 'artist10')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A11" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33011, 'artist11')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A12" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33012, 'artist12')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A13" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33013, 'artist13')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A14" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33014, 'artist14')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A15" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33015, 'artist15')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A16" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33016, 'artist16')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A17" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33017, 'artist17')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A18" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33018, 'artist18')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A19" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33019, 'artist19')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A20" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33020, 'artist20')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A21" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33021, 'artist21')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A22" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33022, 'artist22')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A23" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33023, 'artist23')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A24" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33024, 'artist24')
+ </value></constructor-arg>
+ </bean>
+ <bean id="A25" class="org.apache.cayenne.unit.util.UpdatingSQLTemplate">
+ <constructor-arg type="java.lang.Class"><value>org.apache.art.Artist</value></constructor-arg>
+ <constructor-arg><value>
+ insert into ARTIST (ARTIST_ID, ARTIST_NAME) values (33025, 'artist25')
+ </value></constructor-arg>
+ </bean>
+
+
+ <!-- ======================================= -->
+ <!-- Data Sets -->
+ <!-- ======================================= -->
+ <bean id="testLocalCache" class="java.util.ArrayList">
+ <constructor-arg>
+ <list>
+ <ref bean="A1"/>
+ <ref bean="A2"/>
+ <ref bean="A3"/>
+ <ref bean="A4"/>
+ <ref bean="A5"/>
+ <ref bean="A6"/>
+ <ref bean="A7"/>
+ <ref bean="A8"/>
+ <ref bean="A9"/>
+ <ref bean="A10"/>
+ <ref bean="A11"/>
+ <ref bean="A12"/>
+ <ref bean="A13"/>
+ <ref bean="A14"/>
+ <ref bean="A15"/>
+ <ref bean="A16"/>
+ <ref bean="A17"/>
+ <ref bean="A18"/>
+ <ref bean="A19"/>
+ <ref bean="A20"/>
+ <ref bean="A21"/>
+ <ref bean="A22"/>
+ <ref bean="A23"/>
+ <ref bean="A24"/>
+ <ref bean="A25"/>
+ </list>
+ </constructor-arg>
+ </bean>
+</beans>
\ No newline at end of file