DATAREDIS-636 - Adapt to Range API changes.

Related ticket: DATACMNS-1050.
This commit is contained in:
Mark Paluch
2017-04-26 18:16:46 +02:00
parent dfbdd95fda
commit 016af63dd4
4 changed files with 38 additions and 31 deletions

View File

@@ -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)));
}
/**

View File

@@ -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));
}));
}

View File

@@ -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));
}));
}

View File

@@ -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);