DATAREDIS-636 - Adapt to Range API changes.
Related ticket: DATACMNS-1050.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2016 the original author or authors.
|
||||
* Copyright 2016-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -15,16 +15,16 @@
|
||||
*/
|
||||
package org.springframework.data.redis.connection;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.domain.Range;
|
||||
import org.springframework.data.domain.Range.Bound;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Redis connection using reactive infrastructure declaring entry points for reactive command execution.
|
||||
* <p>
|
||||
@@ -212,7 +212,7 @@ public interface ReactiveRedisConnection extends Closeable {
|
||||
* @return a new {@link RangeCommand} with the lower bound applied.
|
||||
*/
|
||||
public RangeCommand fromIndex(long start) {
|
||||
return new RangeCommand(getKey(), new Range<>(start, range.getUpperBound()));
|
||||
return new RangeCommand(getKey(), Range.of(Bound.inclusive(start), range.getUpperBound()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -223,7 +223,7 @@ public interface ReactiveRedisConnection extends Closeable {
|
||||
* @return a new {@link RangeCommand} with the upper bound applied.
|
||||
*/
|
||||
public RangeCommand toIndex(long end) {
|
||||
return new RangeCommand(getKey(), new Range<>(range.getLowerBound(), end));
|
||||
return new RangeCommand(getKey(), Range.of(range.getLowerBound(), Bound.inclusive(end)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2016 the original author or authors.
|
||||
* Copyright 2016-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package org.springframework.data.redis.connection.lettuce;
|
||||
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Arrays;
|
||||
@@ -26,16 +29,12 @@ import org.springframework.data.redis.connection.ReactiveRedisConnection.Boolean
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.ByteBufferResponse;
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.CommandResponse;
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.KeyCommand;
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.MultiValueResponse;
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.NumericResponse;
|
||||
import org.springframework.data.redis.connection.ReactiveRedisConnection.RangeCommand;
|
||||
import org.springframework.data.redis.connection.RedisListCommands.Position;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
/**
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
@@ -117,7 +116,8 @@ public class LettuceReactiveListCommands implements ReactiveListCommands {
|
||||
Assert.notNull(command.getKey(), "Key must not be null!");
|
||||
Assert.notNull(command.getRange(), "Range must not be null!");
|
||||
|
||||
Flux<ByteBuffer> result = cmd.lrange(command.getKey(), command.getRange().getLowerBound(), command.getRange().getUpperBound());
|
||||
Flux<ByteBuffer> result = cmd.lrange(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null));
|
||||
return Mono.just(new CommandResponse<>(command, result));
|
||||
}));
|
||||
}
|
||||
@@ -134,7 +134,9 @@ public class LettuceReactiveListCommands implements ReactiveListCommands {
|
||||
Assert.notNull(command.getKey(), "Key must not be null!");
|
||||
Assert.notNull(command.getRange(), "Range must not be null!");
|
||||
|
||||
return cmd.ltrim(command.getKey(), command.getRange().getLowerBound(), command.getRange().getUpperBound())
|
||||
return cmd
|
||||
.ltrim(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(LettuceConverters::stringToBoolean).map(value -> new BooleanResponse<>(command, value));
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -246,8 +246,8 @@ public class LettuceReactiveStringCommands implements ReactiveStringCommands {
|
||||
|
||||
Range<Long> range = command.getRange();
|
||||
|
||||
return cmd.getrange(command.getKey(), range.getLowerBound(), range.getUpperBound())
|
||||
.map((value) -> new ByteBufferResponse<>(command, value));
|
||||
return cmd.getrange(command.getKey(), range.getLowerBound().getValue().orElse(null),
|
||||
range.getUpperBound().getValue().orElse(null)).map((value) -> new ByteBufferResponse<>(command, value));
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -316,8 +316,9 @@ public class LettuceReactiveStringCommands implements ReactiveStringCommands {
|
||||
Assert.notNull(command.getKey(), "Key must not be null!");
|
||||
|
||||
Range<Long> range = command.getRange();
|
||||
return (range != null ? cmd.bitcount(command.getKey(), range.getLowerBound(), range.getUpperBound())
|
||||
: cmd.bitcount(command.getKey())).map(responseValue -> new NumericResponse<>(command, responseValue));
|
||||
return (range != null ? cmd.bitcount(command.getKey(), range.getLowerBound().getValue().orElse(null),
|
||||
range.getUpperBound().getValue().orElse(null)) : cmd.bitcount(command.getKey()))
|
||||
.map(responseValue -> new NumericResponse<>(command, responseValue));
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ import org.springframework.data.redis.connection.ReactiveZSetCommands;
|
||||
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
|
||||
import org.springframework.data.redis.connection.RedisZSetCommands.Tuple;
|
||||
import org.springframework.data.redis.util.ByteUtils;
|
||||
import org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -186,22 +185,29 @@ public class LettuceReactiveZSetCommands implements ReactiveZSetCommands {
|
||||
if (ObjectUtils.nullSafeEquals(command.getDirection(), Direction.ASC)) {
|
||||
if (command.isWithScores()) {
|
||||
|
||||
result = cmd.zrangeWithScores(command.getKey(), command.getRange().getLowerBound(),
|
||||
command.getRange().getUpperBound()).map(sc -> (Tuple) new DefaultTuple(getBytes(sc), sc.getScore()));
|
||||
result = cmd
|
||||
.zrangeWithScores(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(sc -> (Tuple) new DefaultTuple(getBytes(sc), sc.getScore()));
|
||||
} else {
|
||||
|
||||
result = cmd.zrange(command.getKey(), command.getRange().getLowerBound(), command.getRange().getUpperBound())
|
||||
result = cmd
|
||||
.zrange(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(value -> (Tuple) new DefaultTuple(ByteUtils.getBytes(value), Double.NaN));
|
||||
}
|
||||
} else {
|
||||
if (command.isWithScores()) {
|
||||
|
||||
result = cmd.zrevrangeWithScores(command.getKey(), command.getRange().getLowerBound(),
|
||||
command.getRange().getUpperBound()).map(sc -> (Tuple) new DefaultTuple(getBytes(sc), sc.getScore()));
|
||||
result = cmd
|
||||
.zrevrangeWithScores(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(sc -> (Tuple) new DefaultTuple(getBytes(sc), sc.getScore()));
|
||||
} else {
|
||||
|
||||
result = cmd
|
||||
.zrevrange(command.getKey(), command.getRange().getLowerBound(), command.getRange().getUpperBound())
|
||||
.zrevrange(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(value -> (Tuple) new DefaultTuple(ByteUtils.getBytes(value), Double.NaN));
|
||||
}
|
||||
}
|
||||
@@ -349,7 +355,8 @@ public class LettuceReactiveZSetCommands implements ReactiveZSetCommands {
|
||||
Assert.notNull(command.getRange(), "Range must not be null!");
|
||||
|
||||
return cmd
|
||||
.zremrangebyrank(command.getKey(), command.getRange().getLowerBound(), command.getRange().getUpperBound())
|
||||
.zremrangebyrank(command.getKey(), command.getRange().getLowerBound().getValue().orElse(null),
|
||||
command.getRange().getUpperBound().getValue().orElse(null))
|
||||
.map(value -> new NumericResponse<>(command, value));
|
||||
}));
|
||||
}
|
||||
@@ -519,12 +526,9 @@ public class LettuceReactiveZSetCommands implements ReactiveZSetCommands {
|
||||
|
||||
return (source) -> {
|
||||
|
||||
// TODO: fix range exclusion pattern when DATACMNS-920 is resolved
|
||||
DirectFieldAccessFallbackBeanWrapper bw = new DirectFieldAccessFallbackBeanWrapper(source);
|
||||
|
||||
Boolean inclusive = upper ? Boolean.valueOf(bw.getPropertyValue("upperInclusive").toString())
|
||||
: Boolean.valueOf(bw.getPropertyValue("lowerInclusive").toString());
|
||||
Object value = upper ? source.getUpperBound() : source.getLowerBound();
|
||||
Boolean inclusive = upper ? source.getUpperBound().isInclusive() : source.getLowerBound().isInclusive();
|
||||
Object value = upper ? source.getUpperBound().getValue().orElse(null)
|
||||
: source.getLowerBound().getValue().orElse(null);
|
||||
|
||||
if (value instanceof Number) {
|
||||
return inclusive ? Boundary.including((Number) value) : Boundary.excluding((Number) value);
|
||||
|
||||
Reference in New Issue
Block a user