From 200a02a9f77a4a4a570f78f5c89a678c9f7e13f5 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Sat, 21 Nov 2020 19:35:36 +0300 Subject: [PATCH] Fixed - redisRepository.opsForZSet().rangeByLex() method throws NullPointerException. #3232 --- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../data/connection/RedissonConnection.java | 44 ++++++++++--------- .../connection/RedissonConnectionTest.java | 14 ++++++ 9 files changed, 206 insertions(+), 160 deletions(-) diff --git a/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 437d4f695..accecc7fc 100644 --- a/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-16/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -923,12 +923,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -978,8 +982,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1036,8 +1040,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1066,8 +1070,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1091,8 +1095,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, RedisCommands.ZCOUNT, key, min, max); } @@ -1121,8 +1125,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1219,8 +1223,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1231,8 +1235,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1260,13 +1264,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1276,8 +1280,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 3990724da..431b53e6b 100644 --- a/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-17/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -980,12 +980,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1035,8 +1039,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1093,8 +1097,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1123,8 +1127,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1148,8 +1152,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, RedisCommands.ZCOUNT, key, min, max); } @@ -1178,8 +1182,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1276,8 +1280,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1288,8 +1292,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1317,13 +1321,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1333,8 +1337,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index d1ab64204..483dbe5f9 100644 --- a/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-18/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -993,12 +993,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1048,8 +1052,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1106,8 +1110,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1136,8 +1140,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1161,8 +1165,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, RedisCommands.ZCOUNT, key, min, max); } @@ -1191,8 +1195,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1289,8 +1293,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1301,8 +1305,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1330,13 +1334,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1346,8 +1350,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index b5886013d..7c4e33e90 100644 --- a/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-20/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -979,12 +979,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1034,8 +1038,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1092,8 +1096,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1122,8 +1126,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1149,8 +1153,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, ZCOUNT, key, min, max); } @@ -1179,8 +1183,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1277,8 +1281,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1289,8 +1293,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1318,13 +1322,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1334,8 +1338,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 1a4e5e406..275e319c3 100644 --- a/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-21/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -1010,12 +1010,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1065,8 +1069,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1123,8 +1127,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1153,8 +1157,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1180,8 +1184,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, ZCOUNT, key, min, max); } @@ -1210,8 +1214,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1308,8 +1312,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1320,8 +1324,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1349,13 +1353,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1365,8 +1369,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index 53a328980..1ae6c105b 100644 --- a/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-22/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -1002,12 +1002,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1057,8 +1061,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1115,8 +1119,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1145,8 +1149,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1172,8 +1176,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, ZCOUNT, key, min, max); } @@ -1202,8 +1206,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1300,8 +1304,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1312,8 +1316,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1341,13 +1345,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1357,8 +1361,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index d54ba80b2..e1b12ca5c 100644 --- a/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-23/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -979,12 +979,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1034,8 +1038,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1092,8 +1096,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1122,8 +1126,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1149,8 +1153,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, ZCOUNT, key, min, max); } @@ -1179,8 +1183,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1277,8 +1281,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1289,8 +1293,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1318,13 +1322,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1334,8 +1338,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java b/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java index d54ba80b2..e1b12ca5c 100644 --- a/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java +++ b/redisson-spring-data/redisson-spring-data-24/src/main/java/org/redisson/spring/data/connection/RedissonConnection.java @@ -979,12 +979,16 @@ public class RedissonConnection extends AbstractRedisConnection { return read(key, ByteArrayCodec.INSTANCE, ZRANGE_ENTRY, key, start, end, "WITHSCORES"); } - private String value(Object score, boolean inclusive, String defaultValue) { + private String value(Range.Boundary boundary, String defaultValue) { + if (boundary == null) { + return defaultValue; + } + Object score = boundary.getValue(); if (score == null) { return defaultValue; } StringBuilder element = new StringBuilder(); - if (!inclusive) { + if (!boundary.isIncluding()) { element.append("("); } else { if (!(score instanceof Double)) { @@ -1034,8 +1038,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1092,8 +1096,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1122,8 +1126,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1149,8 +1153,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zCount(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, StringCodec.INSTANCE, ZCOUNT, key, min, max); } @@ -1179,8 +1183,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Long zRemRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return write(key, StringCodec.INSTANCE, ZREMRANGEBYSCORE, key, min, max); } @@ -1277,8 +1281,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); return read(key, ByteArrayCodec.INSTANCE, RedisCommands.ZRANGEBYSCORE, key, min, max); } @@ -1289,8 +1293,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByScore(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-inf"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+inf"); + String min = value(range.getMin(), "-inf"); + String max = value(range.getMax(), "+inf"); List args = new ArrayList(); args.add(key); @@ -1318,13 +1322,13 @@ public class RedissonConnection extends AbstractRedisConnection { List params = new ArrayList(); params.add(key); if (range.getMin() != null) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); + String min = value(range.getMin(), "-"); params.add(min); } else { params.add("-"); } if (range.getMax() != null) { - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String max = value(range.getMax(), "+"); params.add(max); } else { params.add("+"); @@ -1334,8 +1338,8 @@ public class RedissonConnection extends AbstractRedisConnection { @Override public Set zRangeByLex(byte[] key, Range range, Limit limit) { - String min = value(range.getMin().getValue(), range.getMin().isIncluding(), "-"); - String max = value(range.getMax().getValue(), range.getMax().isIncluding(), "+"); + String min = value(range.getMin(), "-"); + String max = value(range.getMax(), "+"); List args = new ArrayList(); args.add(key); diff --git a/redisson-spring-data/redisson-spring-data-24/src/test/java/org/redisson/spring/data/connection/RedissonConnectionTest.java b/redisson-spring-data/redisson-spring-data-24/src/test/java/org/redisson/spring/data/connection/RedissonConnectionTest.java index 1e94206f2..4d170b7e7 100644 --- a/redisson-spring-data/redisson-spring-data-24/src/test/java/org/redisson/spring/data/connection/RedissonConnectionTest.java +++ b/redisson-spring-data/redisson-spring-data-24/src/test/java/org/redisson/spring/data/connection/RedissonConnectionTest.java @@ -14,8 +14,22 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ScanOptions; import org.springframework.data.redis.core.types.Expiration; +import java.util.Set; + public class RedissonConnectionTest extends BaseConnectionTest { + @Test + public void testRangeByLex() { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(new RedissonConnectionFactory(redisson)); + redisTemplate.afterPropertiesSet(); + + RedisZSetCommands.Range range = new RedisZSetCommands.Range(); + range.lt("c"); + Set zSetValue = redisTemplate.opsForZSet().rangeByLex("val", range); + assertThat(zSetValue).isEmpty(); + } + @Test public void testGeo() { RedisTemplate redisTemplate = new RedisTemplate<>();