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