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 2007/03/12 16:28:58 UTC

svn commit: r517252 - in /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src: main/java/org/apache/cayenne/query/SelectQueryMetadata.java test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java

Author: aadamchik
Date: Mon Mar 12 08:28:57 2007
New Revision: 517252

URL: http://svn.apache.org/viewvc?view=rev&rev=517252
Log:
CAY-767: "fetchLimit" unaccounted when calculating cache key

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java?view=diff&rev=517252&r1=517251&r2=517252
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java Mon Mar 12 08:28:57 2007
@@ -41,10 +41,11 @@
                 this.cacheKey = query.getName();
             }
             else {
-                // create a unique key based on entity, qualifier and ordering
+                // create a unique key based on entity, qualifier, ordering and fetch
+                // limit
 
                 StringBuffer key = new StringBuffer();
-                
+
                 ObjEntity entity = getObjEntity();
                 if (entity != null) {
                     key.append(entity.getName());
@@ -73,6 +74,10 @@
                     }
                 }
                 
+                if(query.getFetchLimit() > 0) {
+                    key.append('/').append(query.getFetchLimit());
+                }
+
                 this.cacheKey = key.toString();
             }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java?view=diff&rev=517252&r1=517251&r2=517252
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyTest.java Mon Mar 12 08:28:57 2007
@@ -19,6 +19,8 @@
 package org.apache.cayenne.query;
 
 import org.apache.art.Artist;
+import org.apache.art.Painting;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.unit.CayenneCase;
 
@@ -27,56 +29,133 @@
     public void testNoCache() {
 
         EntityResolver resolver = getDomain().getEntityResolver();
-        
+
         SelectQuery query = new SelectQuery(Artist.class);
-        
+
         QueryMetadata md1 = query.getMetaData(resolver);
         assertEquals(QueryMetadata.NO_CACHE, md1.getCachePolicy());
         assertNull(md1.getCacheKey());
-        
+
         query.setName("XYZ");
         QueryMetadata md2 = query.getMetaData(resolver);
         assertEquals(QueryMetadata.NO_CACHE, md2.getCachePolicy());
         assertNull(md2.getCacheKey());
     }
-    
+
     public void testLocalCache() {
 
         EntityResolver resolver = getDomain().getEntityResolver();
-        
+
         SelectQuery query = new SelectQuery(Artist.class);
 
         query.setCachePolicy(QueryMetadata.LOCAL_CACHE);
-        
+
         QueryMetadata md1 = query.getMetaData(resolver);
         assertEquals(QueryMetadata.LOCAL_CACHE, md1.getCachePolicy());
         assertNotNull(md1.getCacheKey());
     }
-    
+
     public void testSharedCache() {
 
         EntityResolver resolver = getDomain().getEntityResolver();
-        
+
         SelectQuery query = new SelectQuery(Artist.class);
 
         query.setCachePolicy(QueryMetadata.SHARED_CACHE);
-        
+
         QueryMetadata md1 = query.getMetaData(resolver);
         assertEquals(QueryMetadata.SHARED_CACHE, md1.getCachePolicy());
         assertNotNull(md1.getCacheKey());
     }
-    
+
     public void testNamedQuery() {
 
         EntityResolver resolver = getDomain().getEntityResolver();
-        
+
         SelectQuery query = new SelectQuery(Artist.class);
 
         query.setCachePolicy(QueryMetadata.SHARED_CACHE);
         query.setName("XYZ");
-        
+
         QueryMetadata md1 = query.getMetaData(resolver);
         assertEquals(QueryMetadata.SHARED_CACHE, md1.getCachePolicy());
         assertEquals("XYZ", md1.getCacheKey());
+    }
+
+    public void testUniqueKeyEntity() {
+
+        EntityResolver resolver = getDomain().getEntityResolver();
+
+        SelectQuery q1 = new SelectQuery(Artist.class);
+        q1.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+
+        SelectQuery q2 = new SelectQuery(Artist.class);
+        q2.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+
+        SelectQuery q3 = new SelectQuery(Painting.class);
+        q3.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+
+        assertNotNull(q1.getMetaData(resolver).getCacheKey());
+        assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+                .getMetaData(resolver)
+                .getCacheKey());
+
+        assertFalse(q1.getMetaData(resolver).getCacheKey().equals(
+                q3.getMetaData(resolver).getCacheKey()));
+    }
+
+    public void testUniqueKeyEntityQualifier() {
+
+        EntityResolver resolver = getDomain().getEntityResolver();
+
+        SelectQuery q1 = new SelectQuery(Artist.class);
+        q1.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q1.setQualifier(ExpressionFactory.matchExp("a", "b"));
+
+        SelectQuery q2 = new SelectQuery(Artist.class);
+        q2.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q2.setQualifier(ExpressionFactory.matchExp("a", "b"));
+
+        SelectQuery q3 = new SelectQuery(Artist.class);
+        q3.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q3.setQualifier(ExpressionFactory.matchExp("a", "c"));
+
+        assertNotNull(q1.getMetaData(resolver).getCacheKey());
+        assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+                .getMetaData(resolver)
+                .getCacheKey());
+
+        assertFalse(q1.getMetaData(resolver).getCacheKey().equals(
+                q3.getMetaData(resolver).getCacheKey()));
+    }
+
+    public void testUniqueKeyEntityFetchLimit() {
+
+        EntityResolver resolver = getDomain().getEntityResolver();
+
+        SelectQuery q1 = new SelectQuery(Artist.class);
+        q1.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q1.setFetchLimit(5);
+
+        SelectQuery q2 = new SelectQuery(Artist.class);
+        q2.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q2.setFetchLimit(5);
+
+        SelectQuery q3 = new SelectQuery(Artist.class);
+        q3.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+        q3.setFetchLimit(6);
+
+        SelectQuery q4 = new SelectQuery(Artist.class);
+        q4.setCachePolicy(QueryMetadata.LOCAL_CACHE);
+
+        assertNotNull(q1.getMetaData(resolver).getCacheKey());
+        assertEquals(q1.getMetaData(resolver).getCacheKey(), q2
+                .getMetaData(resolver)
+                .getCacheKey());
+
+        assertFalse(q1.getMetaData(resolver).getCacheKey().equals(
+                q3.getMetaData(resolver).getCacheKey()));
+        assertFalse(q1.getMetaData(resolver).getCacheKey().equals(
+                q4.getMetaData(resolver).getCacheKey()));
     }
 }