From 38ca5973a1d184128b5077add7321f21be8e9efc Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Fri, 18 Aug 2017 16:48:01 -0400 Subject: [PATCH] WIP: Where I stopped when building first a ResultSet cacne then layering an Entity cache. Lot's of tricky bits that were not falling into place. --- .../core/operation/SelectOperation.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/helenus/core/operation/SelectOperation.java b/src/main/java/net/helenus/core/operation/SelectOperation.java index ead9332..7717c72 100644 --- a/src/main/java/net/helenus/core/operation/SelectOperation.java +++ b/src/main/java/net/helenus/core/operation/SelectOperation.java @@ -45,7 +45,9 @@ public final class SelectOperation extends AbstractFilterStreamOperation ordering = null; protected Integer limit = null; protected boolean allowFiltering = false; + protected boolean cacheResult = true; + protected AbstractCache cache; public SelectOperation(AbstractSessionOperations sessionOperations) { super(sessionOperations); @@ -68,7 +70,6 @@ public final class SelectOperation extends AbstractFilterStreamOperation extends AbstractFilterStreamOperation new HelenusPropertyNode(p, Optional.empty())) .forEach(p -> this.props.add(p)); + if (entity.isCacheable()) { + this.cache = sessionOps.cacheFor(CacheManager.Type.FETCH); + } } public SelectOperation( @@ -97,6 +101,9 @@ public final class SelectOperation extends AbstractFilterStreamOperation new HelenusPropertyNode(p, Optional.empty())) .forEach(p -> this.props.add(p)); + if (entity.isCacheable()) { + this.cache = sessionOps.cacheFor(CacheManager.Type.FETCH); + } } public SelectOperation( @@ -108,6 +115,9 @@ public final class SelectOperation extends AbstractFilterStreamOperation 0 && props[0].getEntity().isCacheable()) { + this.cache = sessionOps.cacheFor(CacheManager.Type.FETCH); + } } public CountOperation count() { @@ -140,13 +150,19 @@ public final class SelectOperation extends AbstractFilterStreamOperation( this, (r) -> { Map map = new ValueProviderMap(r, sessionOps.getValueProvider(), entity); - return (R) Helenus.map(entityClass, map); + R result = (R) Helenus.map(entityClass, map); + return result; }); } @@ -180,6 +196,11 @@ public final class SelectOperation extends AbstractFilterStreamOperation cache() { + this.cacheResult = true; + return this; + } + @Override public BuiltStatement buildStatement() { @@ -187,12 +208,18 @@ public final class SelectOperation extends AbstractFilterStreamOperation extends AbstractFilterStreamOperation getOrCreateOrdering() { if (ordering == null) { ordering = new ArrayList();