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 2019/09/27 08:24:56 UTC

[cayenne] branch STABLE-4.0 updated (4f89a09 -> cc6d10c)

This is an automated email from the ASF dual-hosted git repository.

aadamchik pushed a change to branch STABLE-4.0
in repository https://gitbox.apache.org/repos/asf/cayenne.git.


    from 4f89a09  CAY-2616 Modeler: Wrong handling of path with spaces
     new 6bffc01  CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key
     new cc6d10c  CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 RELEASE-NOTES.txt                                  |  1 +
 .../apache/cayenne/query/SelectQueryMetadata.java  | 24 ++++++++++++------
 .../cayenne/query/SelectQueryCacheKeyIT.java       | 29 ++++++++++++++++++++--
 3 files changed, 44 insertions(+), 10 deletions(-)


[cayenne] 02/02: CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key

Posted by aa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aadamchik pushed a commit to branch STABLE-4.0
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit cc6d10c124442837af45ff1c16d7b4fd098b6af2
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Fri Sep 27 11:22:09 2019 +0300

    CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key
---
 RELEASE-NOTES.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 3c20f4e..eec3c49 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -28,6 +28,7 @@ CAY-2582 Double insert of manyToMany relationship mapped to Set
 CAY-2584 Crypto: can't use ColumnSelect with encrypted columns
 CAY-2586 Char can't be materialized to EnumType in some cases
 CAY-2616 Modeler: Wrong handling of path with spaces
+CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key
 
 ----------------------------------
 Release: 4.0.1


[cayenne] 01/02: CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key

Posted by aa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aadamchik pushed a commit to branch STABLE-4.0
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 6bffc010d0390fa71256953916fe1578ef1bac6e
Author: Andrus Adamchik <an...@objectstyle.com>
AuthorDate: Fri Sep 27 10:54:53 2019 +0300

    CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key
---
 .../apache/cayenne/query/SelectQueryMetadata.java  | 24 ++++++++++++------
 .../cayenne/query/SelectQueryCacheKeyIT.java       | 29 ++++++++++++++++++++--
 2 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
index 37a0301..5112001 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SelectQueryMetadata.java
@@ -18,14 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.query;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ObjectId;
 import org.apache.cayenne.Persistent;
@@ -56,6 +48,14 @@ import org.apache.cayenne.reflect.ToManyProperty;
 import org.apache.cayenne.reflect.ToOneProperty;
 import org.apache.cayenne.util.CayenneMapEntry;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * @since 3.0
  */
@@ -135,6 +135,14 @@ class SelectQueryMetadata extends BaseQueryMetadata {
 			}
 		}
 
+		if (query.getHavingQualifier() != null) {
+			key.append('/');
+			if(traversalHandler == null) {
+				traversalHandler = new ToCacheKeyTraversalHandler(resolver.getValueObjectTypeRegistry(), key);
+			}
+			query.getHavingQualifier().traverse(traversalHandler);
+		}
+
 		if (query.getFetchOffset() > 0 || query.getFetchLimit() > 0) {
 			key.append('/');
 			if (query.getFetchOffset() > 0) {
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyIT.java
index 5b4bc94..de16bef 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SelectQueryCacheKeyIT.java
@@ -176,7 +176,7 @@ public class SelectQueryCacheKeyIT extends ServerCase {
     }
 
     @Test
-    public void testUniqueKeyEntityQualifier() {
+    public void testUniqueKeyQualifier() {
 
         SelectQuery<Artist> q1 = new SelectQuery<>(Artist.class);
         q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
@@ -197,7 +197,7 @@ public class SelectQueryCacheKeyIT extends ServerCase {
     }
 
     @Test
-    public void testUniqueKeyEntityFetchLimit() {
+    public void testUniqueKeyFetchLimit() {
 
         SelectQuery<Artist> q1 = new SelectQuery<>(Artist.class);
         q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
@@ -220,4 +220,29 @@ public class SelectQueryCacheKeyIT extends ServerCase {
         assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q3.getMetaData(resolver).getCacheKey());
         assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q4.getMetaData(resolver).getCacheKey());
     }
+
+    @Test
+    public void testUniqueKeyHaving() {
+
+        SelectQuery<Artist> q1 = new SelectQuery<>(Artist.class);
+        q1.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+        q1.setHavingQualifier(ExpressionFactory.expFalse());
+
+        SelectQuery<Artist> q2 = new SelectQuery<>(Artist.class);
+        q2.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+        q2.setHavingQualifier(ExpressionFactory.expFalse());
+
+        SelectQuery<Artist> q3 = new SelectQuery<>(Artist.class);
+        q3.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+        q3.setHavingQualifier(ExpressionFactory.expTrue());
+
+        SelectQuery<Artist> q4 = new SelectQuery<>(Artist.class);
+        q4.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+
+        assertNotNull(q1.getMetaData(resolver).getCacheKey());
+        assertEquals(q1.getMetaData(resolver).getCacheKey(), q2.getMetaData(resolver).getCacheKey());
+
+        assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q3.getMetaData(resolver).getCacheKey());
+        assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q4.getMetaData(resolver).getCacheKey());
+    }
 }