Skip to content

Commit

Permalink
Use IdResolver when deciding if current expression is delete by key (…
Browse files Browse the repository at this point in the history
…Geode backend)
  • Loading branch information
asereda-gs committed Oct 15, 2019
1 parent 744bde1 commit 1ec4fad
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,13 @@ private static class Session implements Backend.Session {
private final Class<?> entityType;
private final Region<Object, Object> region;
private final IdExtractor idExtractor;
private final IdResolver idResolver;
private final QueryService queryService;

private Session(Class<?> entityType, IdResolver idResolver, Region<Object, Object> region) {
this.entityType = Objects.requireNonNull(entityType, "entityType");
this.region = Objects.requireNonNull(region, "region");
this.idResolver = Objects.requireNonNull(idResolver, "idResolver");
this.idExtractor = IdExtractor.fromResolver(idResolver);
this.queryService = region.getRegionService().getQueryService();
}
Expand Down Expand Up @@ -204,7 +206,7 @@ private <T> Flowable<WriteResult> delete(StandardOperations.Delete op) {
}

final Expression filter = op.query().filter().orElseThrow(() -> new IllegalStateException("For " + op));
final Optional<List<?>> ids = Geodes.canDeleteByKey(filter);
final Optional<List<?>> ids = Geodes.canDeleteByKey(filter, idResolver);
// list of ids is present in the expression
if (ids.isPresent()) {
// delete by key: map.remove(key)
Expand Down
6 changes: 4 additions & 2 deletions criteria/geode/src/org/immutables/criteria/geode/Geodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.common.base.Preconditions;
import org.apache.geode.cache.Region;
import org.immutables.criteria.Criteria;
import org.immutables.criteria.backend.IdResolver;
import org.immutables.criteria.backend.ProjectedTuple;
import org.immutables.criteria.expression.Call;
import org.immutables.criteria.expression.Constant;
Expand All @@ -28,6 +29,7 @@
import org.immutables.criteria.expression.Path;
import org.immutables.criteria.expression.Visitors;

import java.lang.reflect.Member;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -105,7 +107,7 @@ private static Object convert(Object value, Type destinationType) {
*
* @param expr filter applied on entries for deletion
*/
static Optional<List<?>> canDeleteByKey(Expression expr) {
static Optional<List<?>> canDeleteByKey(Expression expr, IdResolver idResolver) {
if (!(expr instanceof Call)) {
return Optional.empty();
}
Expand All @@ -127,7 +129,7 @@ static Optional<List<?>> canDeleteByKey(Expression expr) {

final Path path = Visitors.toPath(predicate.arguments().get(0));

if (!(path.paths().size() == 1 && path.paths().get(0).isAnnotationPresent(Criteria.Id.class))) {
if (!(path.paths().size() == 1 && idResolver.asPredicate().test((Member) path.annotatedElement()))) {
return Optional.empty();
}

Expand Down

0 comments on commit 1ec4fad

Please sign in to comment.