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:36:57 UTC
[cayenne] 02/03: CAY-2624 SelectQuery "having" qualifier is not
considered when calculating cache key
This is an automated email from the ASF dual-hosted git repository.
aadamchik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 7d29a671da66f79b5c556b85298aec92dbd38036
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/ObjectSelectMetadata.java | 18 ++++++++++----
.../cayenne/query/ObjectSelect_CacheKeyIT.java | 29 ++++++++++++++++++++--
2 files changed, 40 insertions(+), 7 deletions(-)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelectMetadata.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelectMetadata.java
index 7df22eb..fd1fc67 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelectMetadata.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelectMetadata.java
@@ -18,11 +18,6 @@
****************************************************************/
package org.apache.cayenne.query;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.TraversalHandler;
@@ -30,6 +25,11 @@ import org.apache.cayenne.exp.property.BaseProperty;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.ObjEntity;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* @since 4.2
*/
@@ -102,6 +102,14 @@ class ObjectSelectMetadata extends BaseQueryMetadata {
}
}
+ if (query.getHaving() != null) {
+ key.append('/');
+ if(traversalHandler == null) {
+ traversalHandler = new ToCacheKeyTraversalHandler(resolver.getValueObjectTypeRegistry(), key);
+ }
+ query.getHaving().traverse(traversalHandler);
+ }
+
if (fetchLimit > 0 || fetchOffset > 0) {
key.append('/');
if (fetchOffset > 0) {
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CacheKeyIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CacheKeyIT.java
index 7be5049..7b07cad 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CacheKeyIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ObjectSelect_CacheKeyIT.java
@@ -142,7 +142,7 @@ public class ObjectSelect_CacheKeyIT extends ServerCase {
}
@Test
- public void testUniqueKeyEntityQualifier() {
+ public void testUniqueKeyQualifier() {
ObjectSelect<Artist> q1 = ObjectSelect.query(Artist.class)
.localCache()
@@ -163,7 +163,7 @@ public class ObjectSelect_CacheKeyIT extends ServerCase {
}
@Test
- public void testUniqueKeyEntityFetchLimit() {
+ public void testUniqueKeyFetchLimit() {
ObjectSelect<Artist> q1 = ObjectSelect.query(Artist.class)
.localCache()
@@ -186,4 +186,29 @@ public class ObjectSelect_CacheKeyIT extends ServerCase {
assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q3.getMetaData(resolver).getCacheKey());
assertNotEquals(q1.getMetaData(resolver).getCacheKey(), q4.getMetaData(resolver).getCacheKey());
}
+
+ @Test
+ public void testUniqueKeyHaving() {
+
+ ObjectSelect<Artist> q1 = ObjectSelect.query(Artist.class)
+ .localCache()
+ .having(ExpressionFactory.expFalse());
+
+ ObjectSelect<Artist> q2 = ObjectSelect.query(Artist.class)
+ .localCache()
+ .having(ExpressionFactory.expFalse());
+
+ ObjectSelect<Artist> q3 = ObjectSelect.query(Artist.class)
+ .localCache()
+ .having(ExpressionFactory.expTrue());
+
+ ObjectSelect<Artist> q4 = ObjectSelect.query(Artist.class)
+ .localCache();
+
+ 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());
+ }
}