Skip to content

Commit

Permalink
Simplify Geodes.canDeleteByKey() method
Browse files Browse the repository at this point in the history
  • Loading branch information
asereda-gs committed Jun 19, 2019
1 parent ee7a6ce commit 22df373
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 22 deletions.
Expand Up @@ -24,6 +24,7 @@
import org.immutables.criteria.Repository; import org.immutables.criteria.Repository;
import org.immutables.criteria.adapter.Backend; import org.immutables.criteria.adapter.Backend;
import org.immutables.criteria.adapter.Operations; import org.immutables.criteria.adapter.Operations;
import org.immutables.criteria.expression.Expression;
import org.immutables.criteria.expression.Query; import org.immutables.criteria.expression.Query;
import org.reactivestreams.Publisher; import org.reactivestreams.Publisher;


Expand Down Expand Up @@ -88,13 +89,14 @@ private <T> Flowable<Repository.Success> insert(Operations.Insert<T> op) {


private <T> Flowable<Repository.Success> delete(Operations.Delete op) { private <T> Flowable<Repository.Success> delete(Operations.Delete op) {
if (!op.query().filter().isPresent()) { if (!op.query().filter().isPresent()) {
// means delete all (ie clear whole region) // no filter means delete all (ie clear whole region)
return Completable.fromRunnable(region::clear) return Completable.fromRunnable(region::clear)
.toSingleDefault(Repository.Success.SUCCESS) .toSingleDefault(Repository.Success.SUCCESS)
.toFlowable(); .toFlowable();
} }


final Optional<List<?>> ids = Geodes.canDeleteByKey(op.query()); final Expression filter = op.query().filter().orElseThrow(() -> new IllegalStateException("For " + op));
final Optional<List<?>> ids = Geodes.canDeleteByKey(filter);
// list of ids is present in the expression // list of ids is present in the expression
if (ids.isPresent()) { if (ids.isPresent()) {
// delete by key: map.remove(key) // delete by key: map.remove(key)
Expand All @@ -104,8 +106,7 @@ private <T> Flowable<Repository.Success> delete(Operations.Delete op) {
} }




final String predicate = op.query().filter().get() final String predicate = filter.accept(new GeodeQueryVisitor(path -> String.format("e.value.%s", path.toStringPath())));
.accept(new GeodeQueryVisitor(path -> String.format("e.value.%s", path.toStringPath())));


final String query = String.format("select distinct e.key from %s.entries e where %s", region.getFullPath(), predicate); final String query = String.format("select distinct e.key from %s.entries e where %s", region.getFullPath(), predicate);


Expand Down
21 changes: 3 additions & 18 deletions criteria/geode/src/org/immutables/criteria/geode/Geodes.java
Expand Up @@ -18,19 +18,14 @@


import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import org.immutables.criteria.Criteria; import org.immutables.criteria.Criteria;
import org.immutables.criteria.Criterias;
import org.immutables.criteria.DocumentCriteria;
import org.immutables.criteria.expression.Call; import org.immutables.criteria.expression.Call;
import org.immutables.criteria.expression.Constant; import org.immutables.criteria.expression.Constant;
import org.immutables.criteria.expression.Expression; import org.immutables.criteria.expression.Expression;
import org.immutables.criteria.expression.ExpressionConverter; import org.immutables.criteria.expression.ExpressionConverter;
import org.immutables.criteria.expression.Operators; import org.immutables.criteria.expression.Operators;
import org.immutables.criteria.expression.Path; import org.immutables.criteria.expression.Path;
import org.immutables.criteria.expression.Query;
import org.immutables.criteria.expression.Visitors; import org.immutables.criteria.expression.Visitors;


import java.lang.reflect.AnnotatedElement;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
Expand Down Expand Up @@ -67,15 +62,9 @@ static ExpressionConverter<String> converter() {
* } * }
* </pre> * </pre>
* *
* * @param expr filter applied on entries for deletion
*/ */
static Optional<List<?>> canDeleteByKey(Query query) { static Optional<List<?>> canDeleteByKey(Expression expr) {
if (!query.filter().isPresent()) {
return Optional.of(Collections.emptyList());
}

final Expression expr = query.filter().get();

if (!(expr instanceof Call)) { if (!(expr instanceof Call)) {
return Optional.empty(); return Optional.empty();
} }
Expand All @@ -97,15 +86,11 @@ static Optional<List<?>> canDeleteByKey(Query query) {


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


if (!(path.paths().size() == 1 && isIdAttribute(path.paths().get(0)))) { if (!(path.paths().size() == 1 && path.paths().get(0).isAnnotationPresent(Criteria.Id.class))) {
return Optional.empty(); return Optional.empty();
} }


final List<Object> values = Visitors.toConstant(predicate.arguments().get(1)).values(); final List<Object> values = Visitors.toConstant(predicate.arguments().get(1)).values();
return Optional.of(values); return Optional.of(values);
} }

private static boolean isIdAttribute(AnnotatedElement element) {
return element.isAnnotationPresent(Criteria.Id.class);
}
} }

0 comments on commit 22df373

Please sign in to comment.