diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisGeoCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisGeoCommands.java index 4656e920c..d7b989d8b 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisGeoCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisGeoCommands.java @@ -163,7 +163,8 @@ class JedisGeoCommands implements RedisGeoCommands { return null; } - return distanceConverter.convert(connection.getJedis().geodist(key, member1, member2)); + Double distance = connection.getJedis().geodist(key, member1, member2); + return distance != null ? distanceConverter.convert(distance) : null; } catch (Exception ex) { throw convertJedisAccessException(ex); } @@ -196,7 +197,8 @@ class JedisGeoCommands implements RedisGeoCommands { return null; } - return distanceConverter.convert(connection.getJedis().geodist(key, member1, member2, geoUnit)); + Double distance = connection.getJedis().geodist(key, member1, member2, geoUnit); + return distance != null ? distanceConverter.convert(distance) : null; } catch (Exception ex) { throw convertJedisAccessException(ex); } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java index eb5b8f373..4b7f2dfd9 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceGeoCommands.java @@ -176,7 +176,9 @@ class LettuceGeoCommands implements RedisGeoCommands { distanceConverter)); return null; } - return distanceConverter.convert(getConnection().geodist(key, member1, member2, geoUnit)); + + Double distance = getConnection().geodist(key, member1, member2, geoUnit); + return distance != null ? distanceConverter.convert(distance) : null; } catch (Exception ex) { throw convertLettuceAccessException(ex); } diff --git a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java index 70c635d42..f8c86978d 100644 --- a/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java @@ -2704,6 +2704,19 @@ public abstract class AbstractConnectionIntegrationTests { assertThat(((Distance) result.get(1)).getUnit()).isEqualTo("m"); } + @Test // DATAREDIS-1214 + @IfProfileValue(name = "redisVersion", value = "3.2+") + @WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE }) + public void geoDistNotExisting() { + + String key = "geo-" + UUID.randomUUID(); + actual.add(connection.geoAdd(key, Arrays.asList(PALERMO, CATANIA))); + actual.add(connection.geoDist(key, "Spring", "Data")); + + List result = getResults(); + assertThat(result.get(1)).isNull(); + } + @Test // DATAREDIS-438 @IfProfileValue(name = "redisVersion", value = "3.2+") @WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE }) diff --git a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java index bf41f1a6b..52424e2c2 100644 --- a/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java +++ b/src/test/java/org/springframework/data/redis/core/DefaultGeoOperationsTests.java @@ -186,6 +186,22 @@ public class DefaultGeoOperationsTests { assertThat(dist.getUnit()).isEqualTo("ft"); } + @Test // DATAREDIS-1214 + public void geoDistShouldReturnNullIfNoDistanceCalculable() { + + K key = keyFactory.instance(); + M member1 = valueFactory.instance(); + M member2 = valueFactory.instance(); + M member3 = valueFactory.instance(); + M member4 = valueFactory.instance(); + + geoOperations.add(key, POINT_PALERMO, member1); + geoOperations.add(key, POINT_CATANIA, member2); + + Distance dist = geoOperations.distance(key, member3, member4, DistanceUnit.FEET); + assertThat(dist).isNull(); + } + @Test // DATAREDIS-438, DATAREDIS-614 public void testGeoHash() {