From ca494562574e6286cb6105927576dd0f46d93df5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 5 Nov 2020 10:43:44 +0100 Subject: [PATCH 1/3] DATAREDIS-1245 - Prepare issue branch. --- pom.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c7fcc5fc51..5522b51966 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,13 @@ - + 4.0.0 org.springframework.data spring-data-redis - 2.5.0-SNAPSHOT + 2.5.0-DATAREDIS-1245-SNAPSHOT Spring Data Redis From 272498ec0cbe753fe8ba304c7e83f2b5da17233a Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 5 Nov 2020 10:44:53 +0100 Subject: [PATCH 2/3] DATAREDIS-1245 - Consider List subtypes used with RedisScript as MULTI return type. We now consider List and subtypes of List to be returned as MULTI return type. Previously, List subtypes were considered to represent the value type. --- .../data/redis/connection/ReturnType.java | 7 +++- .../redis/connection/ReturnTypeUnitTests.java | 41 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java diff --git a/src/main/java/org/springframework/data/redis/connection/ReturnType.java b/src/main/java/org/springframework/data/redis/connection/ReturnType.java index 3709fa3b16..840cdaf543 100644 --- a/src/main/java/org/springframework/data/redis/connection/ReturnType.java +++ b/src/main/java/org/springframework/data/redis/connection/ReturnType.java @@ -25,6 +25,7 @@ * * @author Jennifer Hickey * @author Christoph Strobl + * @author Mark Paluch */ public enum ReturnType { @@ -62,15 +63,19 @@ public static ReturnType fromJavaType(@Nullable Class javaType) { if (javaType == null) { return ReturnType.STATUS; } - if (javaType.isAssignableFrom(List.class)) { + + if (List.class.isAssignableFrom(javaType)) { return ReturnType.MULTI; } + if (javaType.isAssignableFrom(Boolean.class)) { return ReturnType.BOOLEAN; } + if (javaType.isAssignableFrom(Long.class)) { return ReturnType.INTEGER; } + return ReturnType.VALUE; } } diff --git a/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java b/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java new file mode 100644 index 0000000000..92f52713e7 --- /dev/null +++ b/src/test/java/org/springframework/data/redis/connection/ReturnTypeUnitTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.redis.connection; + +import static org.assertj.core.api.Assertions.*; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +/** + * Unit tests for {@link ReturnType}. + * + * @author Mark Paluch + */ +class ReturnTypeUnitTests { + + @ParameterizedTest // DATAREDIS-1245 + @ValueSource(classes = { List.class, ArrayList.class, LinkedList.class }) + void shouldConsiderListsAsMultiType(Class listClass) { + + assertThat(ReturnType.fromJavaType(listClass)).isEqualTo(ReturnType.MULTI); + } + +} From 433b57112f88c6434690993f31f21188defd7ebd Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 5 Nov 2020 10:45:54 +0100 Subject: [PATCH 3/3] DATAREDIS-1245 - Polishing. Fix Javadoc and generics. --- .../data/redis/core/script/RedisScript.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/core/script/RedisScript.java b/src/main/java/org/springframework/data/redis/core/script/RedisScript.java index 7ab45c55f2..37ced9b4a8 100644 --- a/src/main/java/org/springframework/data/redis/core/script/RedisScript.java +++ b/src/main/java/org/springframework/data/redis/core/script/RedisScript.java @@ -27,7 +27,7 @@ * @author Christoph Strobl * @author Mark Paluch * @param The script result type. Should be one of Long, Boolean, List, or deserialized value type. Can be - * {@litearl null} if the script returns a throw-away status (i.e "OK") + * {@literal null} if the script returns a throw-away status (i.e "OK") */ public interface RedisScript { @@ -57,7 +57,7 @@ default boolean returnsRawValue() { } /** - * Creates new {@link RedisScript} from {@link String}. + * Creates new {@link RedisScript} from {@code script} as {@link String}. * * @param script must not be {@literal null}. * @return new instance of {@link RedisScript}. @@ -68,19 +68,19 @@ static RedisScript of(String script) { } /** - * Creates new {@link RedisScript} from {@link String}. + * Creates new {@link RedisScript} from {@code script} as {@link String}. * * @param script must not be {@literal null}. * @param resultType must not be {@literal null}. * @return new instance of {@link RedisScript}. * @since 2.0 */ - static RedisScript of(String script, Class resultType) { + static RedisScript of(String script, Class resultType) { Assert.notNull(script, "Script must not be null!"); Assert.notNull(resultType, "ResultType must not be null!"); - return new DefaultRedisScript(script, resultType); + return new DefaultRedisScript<>(script, resultType); } /**