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)