From 106c9c0fe838bec0c7a0cfc2af24ecf3ec01f6f5 Mon Sep 17 00:00:00 2001 From: Junghoon Ban Date: Wed, 29 Nov 2023 17:09:00 +0900 Subject: [PATCH 1/4] Use criteria variable directly. --- .../redis/repository/query/RedisQueryCreator.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java index 1b6afa8a43..b9c59ac2c6 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java +++ b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java @@ -29,6 +29,7 @@ import org.springframework.data.repository.query.parser.AbstractQueryCreator; import org.springframework.data.repository.query.parser.Part; import org.springframework.data.repository.query.parser.PartTree; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; /** @@ -78,16 +79,16 @@ protected RedisOperationChain or(RedisOperationChain base, RedisOperationChain c } @Override - protected KeyValueQuery complete(final RedisOperationChain criteria, Sort sort) { + protected KeyValueQuery complete(@Nullable final RedisOperationChain criteria, Sort sort) { KeyValueQuery query = new KeyValueQuery<>(criteria); - if (query.getCriteria() != null && !CollectionUtils.isEmpty(query.getCriteria().getSismember()) - && !CollectionUtils.isEmpty(query.getCriteria().getOrSismember())) - if (query.getCriteria().getSismember().size() == 1 && query.getCriteria().getOrSismember().size() == 1) { + if (criteria != null && !CollectionUtils.isEmpty(criteria.getSismember()) + && !CollectionUtils.isEmpty(criteria.getOrSismember())) + if (criteria.getSismember().size() == 1 && criteria.getOrSismember().size() == 1) { - query.getCriteria().getOrSismember().add(query.getCriteria().getSismember().iterator().next()); - query.getCriteria().getSismember().clear(); + criteria.getOrSismember().add(criteria.getSismember().iterator().next()); + criteria.getSismember().clear(); } if (sort.isSorted()) { From 93c4244033b9fb3d102b7f428aed422f3facdc83 Mon Sep 17 00:00:00 2001 From: Junghoon Ban Date: Wed, 29 Nov 2023 17:17:50 +0900 Subject: [PATCH 2/4] Use pattern matching instead of type casting. --- .../repository/query/RedisQueryCreator.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java index b9c59ac2c6..4219037004 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java +++ b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java @@ -105,12 +105,12 @@ private NearPath getNearPath(Part part, Iterator iterator) { Point point; Distance distance; - if (value instanceof Circle) { - point = ((Circle) value).getCenter(); - distance = ((Circle) value).getRadius(); - } else if (value instanceof Point) { + if (value instanceof Circle circleValue) { + point = circleValue.getCenter(); + distance = circleValue.getRadius(); + } else if (value instanceof Point pointValue) { - point = (Point) value; + point = pointValue; if (!iterator.hasNext()) { String message = "Expected to find distance value for geo query; Are you missing a parameter"; @@ -118,10 +118,10 @@ private NearPath getNearPath(Part part, Iterator iterator) { } Object distObject = iterator.next(); - if (distObject instanceof Distance) { - distance = (Distance) distObject; - } else if (distObject instanceof Number) { - distance = new Distance(((Number) distObject).doubleValue(), Metrics.KILOMETERS); + if (distObject instanceof Distance distanceValue) { + distance = distanceValue; + } else if (distObject instanceof Number numberValue) { + distance = new Distance(numberValue.doubleValue(), Metrics.KILOMETERS); } else { String message = String.format("Expected to find Distance or Numeric value for geo query but was %s", From a569abd71e5eec6098aa633f6f2f0fc1bab52aa3 Mon Sep 17 00:00:00 2001 From: Junghoon Ban Date: Wed, 29 Nov 2023 17:46:07 +0900 Subject: [PATCH 3/4] Refine if branches in getNearPath. --- .../repository/query/RedisQueryCreator.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java index 4219037004..cac2120ca7 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java +++ b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java @@ -100,24 +100,23 @@ protected KeyValueQuery complete(@Nullable final RedisOpera private NearPath getNearPath(Part part, Iterator iterator) { + String path = part.getProperty().toDotPath(); Object value = iterator.next(); - Point point; - Distance distance; - - if (value instanceof Circle circleValue) { - point = circleValue.getCenter(); - distance = circleValue.getRadius(); - } else if (value instanceof Point pointValue) { + if (value instanceof Circle circle) { + return new NearPath(path, circle.getCenter(), circle.getRadius()); + } - point = pointValue; + if (value instanceof Point point) { if (!iterator.hasNext()) { String message = "Expected to find distance value for geo query; Are you missing a parameter"; throw new InvalidDataAccessApiUsageException(message); } + Distance distance; Object distObject = iterator.next(); + if (distObject instanceof Distance distanceValue) { distance = distanceValue; } else if (distObject instanceof Number numberValue) { @@ -126,17 +125,14 @@ private NearPath getNearPath(Part part, Iterator iterator) { String message = String.format("Expected to find Distance or Numeric value for geo query but was %s", distObject.getClass()); - throw new InvalidDataAccessApiUsageException(message); } - } else { - - String message = String.format("Expected to find a Circle or Point/Distance for geo query but was %s.", - value.getClass()); - throw new InvalidDataAccessApiUsageException(message); + return new NearPath(path, point, distance); } - return new NearPath(part.getProperty().toDotPath(), point, distance); + String message = String.format("Expected to find a Circle or Point/Distance for geo query but was %s.", + value.getClass()); + throw new InvalidDataAccessApiUsageException(message); } } From e0627cbf78320cb396c64fd9a3dfaefc891f509a Mon Sep 17 00:00:00 2001 From: Junghoon Ban Date: Wed, 29 Nov 2023 17:48:07 +0900 Subject: [PATCH 4/4] Add author tag. --- .../data/redis/repository/query/RedisQueryCreator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java index cac2120ca7..10970f8a4a 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java +++ b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java @@ -38,6 +38,7 @@ * @author Christoph Strobl * @author Mark Paluch * @author John Blum + * @author Junghoon Ban * @since 1.7 */ public class RedisQueryCreator extends AbstractQueryCreator, RedisOperationChain> {