You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/08/27 07:40:18 UTC
[shardingsphere] branch master updated: Refactor to use optional.
(#12047)
This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new dd43a3d Refactor to use optional. (#12047)
dd43a3d is described below
commit dd43a3dc3625598cb556905b2f6350b704046356
Author: Guocheng Tang <48...@qq.com>
AuthorDate: Fri Aug 27 15:39:51 2021 +0800
Refactor to use optional. (#12047)
* fix test case error.
* Refactor getTargetNumericType method to use optional.
* Fix the logic error.
---
.../sql/common/util/SafeNumberOperationUtil.java | 58 ++++++++++------------
1 file changed, 27 insertions(+), 31 deletions(-)
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SafeNumberOperationUtil.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SafeNumberOperationUtil.java
index 5b4e151..5edef82 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SafeNumberOperationUtil.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SafeNumberOperationUtil.java
@@ -29,6 +29,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -70,11 +71,11 @@ public final class SafeNumberOperationUtil {
try {
return Range.closed(lowerEndpoint, upperEndpoint);
} catch (final ClassCastException ex) {
- Class<?> clazz = getTargetNumericType(Arrays.asList(lowerEndpoint, upperEndpoint));
- if (null == clazz) {
+ Optional<Class<?>> clazz = getTargetNumericType(Arrays.asList(lowerEndpoint, upperEndpoint));
+ if (!clazz.isPresent()) {
throw ex;
}
- return Range.closed(parseNumberByClazz(lowerEndpoint.toString(), clazz), parseNumberByClazz(upperEndpoint.toString(), clazz));
+ return Range.closed(parseNumberByClazz(lowerEndpoint.toString(), clazz.get()), parseNumberByClazz(upperEndpoint.toString(), clazz.get()));
}
}
@@ -91,12 +92,12 @@ public final class SafeNumberOperationUtil {
} catch (final ClassCastException ex) {
Comparable<?> rangeUpperEndpoint = range.hasUpperBound() ? range.upperEndpoint() : null;
Comparable<?> rangeLowerEndpoint = range.hasLowerBound() ? range.lowerEndpoint() : null;
- Class<?> clazz = getTargetNumericType(Arrays.asList(rangeLowerEndpoint, rangeUpperEndpoint, endpoint));
- if (null == clazz) {
+ Optional<Class<?>> clazz = getTargetNumericType(Arrays.asList(rangeLowerEndpoint, rangeUpperEndpoint, endpoint));
+ if (!clazz.isPresent()) {
throw ex;
}
- Range<Comparable<?>> newRange = createTargetNumericTypeRange(range, clazz);
- return newRange.contains(parseNumberByClazz(endpoint.toString(), clazz));
+ Range<Comparable<?>> newRange = createTargetNumericTypeRange(range, clazz.get());
+ return newRange.contains(parseNumberByClazz(endpoint.toString(), clazz.get()));
}
}
@@ -127,12 +128,12 @@ public final class SafeNumberOperationUtil {
public static boolean safeCollectionEquals(final Collection<Comparable<?>> sources, final Collection<Comparable<?>> targetCollection) {
List<Comparable<?>> collection = new ArrayList<>(sources);
collection.addAll(targetCollection);
- Class<?> clazz = getTargetNumericType(collection);
- if (null == clazz) {
+ Optional<Class<?>> clazz = getTargetNumericType(collection);
+ if (!clazz.isPresent()) {
return sources.equals(targetCollection);
}
- List<Comparable<?>> sourceClazzCollection = sources.stream().map(number -> parseNumberByClazz(number.toString(), clazz)).collect(Collectors.toList());
- List<Comparable<?>> targetClazzCollection = targetCollection.stream().map(number -> parseNumberByClazz(number.toString(), clazz)).collect(Collectors.toList());
+ List<Comparable<?>> sourceClazzCollection = sources.stream().map(number -> parseNumberByClazz(number.toString(), clazz.get())).collect(Collectors.toList());
+ List<Comparable<?>> targetClazzCollection = targetCollection.stream().map(number -> parseNumberByClazz(number.toString(), clazz.get())).collect(Collectors.toList());
return sourceClazzCollection.equals(targetClazzCollection);
}
@@ -141,7 +142,7 @@ public final class SafeNumberOperationUtil {
Comparable<?> sourceRangeUpperEndpoint = sourceRange.hasUpperBound() ? sourceRange.upperEndpoint() : null;
Comparable<?> targetRangeLowerEndpoint = targetRange.hasLowerBound() ? targetRange.lowerEndpoint() : null;
Comparable<?> targetRangeUpperEndpoint = targetRange.hasUpperBound() ? targetRange.upperEndpoint() : null;
- return getTargetNumericType(Arrays.asList(sourceRangeLowerEndpoint, sourceRangeUpperEndpoint, targetRangeLowerEndpoint, targetRangeUpperEndpoint));
+ return getTargetNumericType(Arrays.asList(sourceRangeLowerEndpoint, sourceRangeUpperEndpoint, targetRangeLowerEndpoint, targetRangeUpperEndpoint)).orElse(null);
}
private static Range<Comparable<?>> createTargetNumericTypeRange(final Range<Comparable<?>> range, final Class<?> clazz) {
@@ -161,28 +162,23 @@ public final class SafeNumberOperationUtil {
return Range.upTo(upperEndpoint, range.upperBoundType());
}
- private static Class<?> getTargetNumericType(final List<Comparable<?>> endpoints) {
+ private static Optional<Class<?>> getTargetNumericType(final List<Comparable<?>> endpoints) {
Set<Class<?>> clazzSet = endpoints.stream().filter(Objects::nonNull).map(Comparable::getClass).collect(Collectors.toSet());
+ Class<?> clazz = null;
if (clazzSet.contains(BigDecimal.class)) {
- return BigDecimal.class;
- }
- if (clazzSet.contains(Double.class)) {
- return Double.class;
- }
- if (clazzSet.contains(Float.class)) {
- return Float.class;
- }
- if (clazzSet.contains(BigInteger.class)) {
- return BigInteger.class;
- }
- if (clazzSet.contains(Long.class)) {
- return Long.class;
- }
- if (clazzSet.contains(Integer.class)) {
- return Integer.class;
+ clazz = BigDecimal.class;
+ } else if (clazzSet.contains(Double.class)) {
+ clazz = Double.class;
+ } else if (clazzSet.contains(Float.class)) {
+ clazz = Float.class;
+ } else if (clazzSet.contains(BigInteger.class)) {
+ clazz = BigInteger.class;
+ } else if (clazzSet.contains(Long.class)) {
+ clazz = Long.class;
+ } else if (clazzSet.contains(Integer.class)) {
+ clazz = Integer.class;
}
- // TODO do not permit return null, please use optional
- return null;
+ return Optional.ofNullable(clazz);
}
@SneakyThrows(ReflectiveOperationException.class)