diff --git a/criteria/geode/src/org/immutables/criteria/geode/Geodes.java b/criteria/geode/src/org/immutables/criteria/geode/Geodes.java index 9b5bfa874..c5a950b36 100644 --- a/criteria/geode/src/org/immutables/criteria/geode/Geodes.java +++ b/criteria/geode/src/org/immutables/criteria/geode/Geodes.java @@ -17,6 +17,7 @@ package org.immutables.criteria.geode; import com.google.common.base.Preconditions; +import org.apache.geode.cache.Region; import org.immutables.criteria.Criteria; import org.immutables.criteria.backend.ProjectedTuple; import org.immutables.criteria.expression.Call; @@ -87,7 +88,7 @@ private static Object convert(Object value, Type destinationType) { /** * Geode (currently) doesn't support delete by query syntax ({@code DELETE ... WHERE ...}) and elements have to be - * removed explicitly by key ({@link Map#remove(Object)} API) + * removed explicitly by key (using {@link Map#remove(Object)} or {@link Region#removeAll} API) * *

Tries to detect if current criteria is based only on keys and extract them from expression (if it is only * expression based on keys). diff --git a/criteria/geode/test/org/immutables/criteria/geode/GeodePersonTest.java b/criteria/geode/test/org/immutables/criteria/geode/GeodePersonTest.java index 5566a2033..1f0a98421 100644 --- a/criteria/geode/test/org/immutables/criteria/geode/GeodePersonTest.java +++ b/criteria/geode/test/org/immutables/criteria/geode/GeodePersonTest.java @@ -20,7 +20,10 @@ import org.immutables.criteria.backend.Backend; import org.immutables.criteria.backend.WithSessionCallback; import org.immutables.criteria.personmodel.AbstractPersonTest; +import org.immutables.criteria.personmodel.Person; +import org.immutables.criteria.personmodel.PersonGenerator; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import java.util.EnumSet; @@ -52,4 +55,28 @@ public void nested() { // nested doesn't work yet in Geode. Need custom PDX serializer } + @Test + void deleteByKey() { + PersonGenerator generator = new PersonGenerator(); + repository().insert(generator.next().withId("id1")); + repository().insert(generator.next().withId("id2")); + repository().insert(generator.next().withId("id3")); + + repository().delete(person.id.in("bad1", "bad2")); + + // nothing was deleted (bad ids) + check(repository().findAll()).toList(Person::id).hasContentInAnyOrder("id1", "id2", "id3"); + + repository().delete(person.id.is("id1")); + check(repository().findAll()).toList(Person::id).hasContentInAnyOrder("id2", "id3"); + + repository().delete(person.id.in("id1", "id1")); + check(repository().findAll()).toList(Person::id).hasContentInAnyOrder("id2", "id3"); + + repository().delete(person.id.in("id2", "id2", "id1")); + check(repository().findAll()).toList(Person::id).hasContentInAnyOrder("id3"); + + repository().delete(person.id.in("id2", "id2", "id1", "id3")); + check(repository().findAll()).toList(Person::id).isEmpty(); + } }