Add containsKey
This commit is contained in:
parent
ca8718780e
commit
f837a1d1b2
@ -107,6 +107,10 @@ public class LLRange extends ResourceSupport<LLRange, LLRange> {
|
||||
return new LLRange(null, null, single);
|
||||
}
|
||||
|
||||
public static LLRange singleUnsafe(Buffer single) {
|
||||
return new LLRange(null, null, single);
|
||||
}
|
||||
|
||||
public static LLRange of(Send<Buffer> min, Send<Buffer> max) {
|
||||
return new LLRange(min, max, null);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import it.cavallium.dbengine.database.Delta;
|
||||
import it.cavallium.dbengine.database.LLDictionary;
|
||||
import it.cavallium.dbengine.database.LLDictionaryResultType;
|
||||
import it.cavallium.dbengine.database.LLEntry;
|
||||
import it.cavallium.dbengine.database.LLRange;
|
||||
import it.cavallium.dbengine.database.LLUtils;
|
||||
import it.cavallium.dbengine.database.UpdateMode;
|
||||
import it.cavallium.dbengine.database.UpdateReturnMode;
|
||||
@ -21,8 +22,6 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMaps;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@ -34,7 +33,6 @@ import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.core.publisher.SynchronousSink;
|
||||
import reactor.util.function.Tuple2;
|
||||
import reactor.util.function.Tuples;
|
||||
|
||||
/**
|
||||
* Optimized implementation of "DatabaseMapDictionary with SubStageGetterSingle"
|
||||
@ -193,6 +191,15 @@ public class DatabaseMapDictionary<T, U> extends DatabaseMapDictionaryDeep<T, U,
|
||||
new DatabaseSingle<>(dictionary, serializeKeySuffixToKey(keySuffix), valueSerializer, null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Boolean> containsKey(@Nullable CompositeSnapshot snapshot, T keySuffix) {
|
||||
return dictionary
|
||||
.isRangeEmpty(resolveSnapshot(snapshot),
|
||||
Mono.fromCallable(() -> LLRange.singleUnsafe(serializeKeySuffixToKey(keySuffix)).send())
|
||||
)
|
||||
.map(empty -> !empty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<U> getValue(@Nullable CompositeSnapshot snapshot, T keySuffix, boolean existsAlmostCertainly) {
|
||||
return dictionary
|
||||
|
@ -12,7 +12,6 @@ import it.cavallium.dbengine.database.serialization.SerializationFunction;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectSortedMaps;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
@ -30,6 +29,11 @@ public interface DatabaseStageMap<T, U, US extends DatabaseStage<U>> extends
|
||||
|
||||
Mono<US> at(@Nullable CompositeSnapshot snapshot, T key);
|
||||
|
||||
default Mono<Boolean> containsKey(@Nullable CompositeSnapshot snapshot, T key) {
|
||||
return LLUtils.usingResource(this.at(snapshot, key),
|
||||
stage -> stage.isEmpty(snapshot).map(empty -> !empty), true);
|
||||
}
|
||||
|
||||
default Mono<U> getValue(@Nullable CompositeSnapshot snapshot, T key, boolean existsAlmostCertainly) {
|
||||
return LLUtils.usingResource(this.at(snapshot, key),
|
||||
stage -> stage.get(snapshot, existsAlmostCertainly), true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user