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 2022/05/26 03:08:59 UTC

[shardingsphere] branch master updated: Remove JapaneseDate related context in IntervalShardingAlgorithm (#17953)

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 28345eb8748 Remove JapaneseDate related context in IntervalShardingAlgorithm (#17953)
28345eb8748 is described below

commit 28345eb8748f70d5458f9805dbdca09f59b1d385
Author: Ling Hengqian <li...@outlook.com>
AuthorDate: Thu May 26 11:08:52 2022 +0800

    Remove JapaneseDate related context in IntervalShardingAlgorithm (#17953)
    
    * Remove JapaneseDate related context in IntervalShardingAlgorithm due to JDK limitations.
    
    * Use upper-level abstractions to cover edge cases.
---
 .../datetime/IntervalShardingAlgorithm.java         | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithm.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithm.java
index af9a905fb28..9735ba28385 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithm.java
@@ -33,8 +33,9 @@ import java.time.LocalTime;
 import java.time.OffsetDateTime;
 import java.time.OffsetTime;
 import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.chrono.JapaneseDate;
+import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
+import java.time.chrono.ChronoZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
@@ -146,10 +147,8 @@ public final class IntervalShardingAlgorithm implements StandardShardingAlgorith
         TemporalAccessor calculateTime = dateTimeLower;
         LocalDate queryToLocalDate = calculateTime.query(TemporalQueries.localDate());
         LocalTime queryToLocalTime = calculateTime.query(TemporalQueries.localTime());
-        LocalDate dateTimeLowerAsLocalDate = dateTimeLower.query(TemporalQueries.localDate());
-        LocalTime dateTimeLowerAsLocalTime = dateTimeLower.query(TemporalQueries.localTime());
         LocalDate dateTimeUpperAsLocalDate = dateTimeUpper.query(TemporalQueries.localDate());
-        LocalTime dateTimeUpperAsLocalTime = dateTimeUpper.query(TemporalQueries.localTime());
+        LocalDate dateTimeLowerAsLocalDate = dateTimeLower.query(TemporalQueries.localDate());
         if (null == queryToLocalTime) {
             LocalDate calculateTimeAsView = calculateTime.query(TemporalQueries.localDate());
             while (!calculateTimeAsView.isAfter(dateTimeUpperAsLocalDate)) {
@@ -160,6 +159,8 @@ public final class IntervalShardingAlgorithm implements StandardShardingAlgorith
             }
             return result;
         }
+        LocalTime dateTimeUpperAsLocalTime = dateTimeUpper.query(TemporalQueries.localTime());
+        LocalTime dateTimeLowerAsLocalTime = dateTimeLower.query(TemporalQueries.localTime());
         if (null == queryToLocalDate) {
             LocalTime calculateTimeAsView = calculateTime.query(TemporalQueries.localTime());
             while (!calculateTimeAsView.isAfter(dateTimeUpperAsLocalTime)) {
@@ -171,8 +172,8 @@ public final class IntervalShardingAlgorithm implements StandardShardingAlgorith
             return result;
         }
         LocalDateTime calculateTimeAsView = LocalDateTime.of(calculateTime.query(TemporalQueries.localDate()), calculateTime.query(TemporalQueries.localTime()));
-        LocalDateTime dateTimeLowerAsLocalDateTime = LocalDateTime.of(dateTimeLowerAsLocalDate, dateTimeLowerAsLocalTime);
         LocalDateTime dateTimeUpperAsLocalDateTime = LocalDateTime.of(dateTimeUpperAsLocalDate, dateTimeUpperAsLocalTime);
+        LocalDateTime dateTimeLowerAsLocalDateTime = LocalDateTime.of(dateTimeLowerAsLocalDate, dateTimeLowerAsLocalTime);
         while (!calculateTimeAsView.isAfter(dateTimeUpperAsLocalDateTime)) {
             if (hasIntersection(Range.closedOpen(calculateTimeAsView, calculateTimeAsView.plus(stepAmount, stepUnit)), range, dateTimeLowerAsLocalDateTime, dateTimeUpperAsLocalDateTime)) {
                 result.addAll(getMatchedTables(calculateTimeAsView, availableTargetNames));
@@ -220,11 +221,11 @@ public final class IntervalShardingAlgorithm implements StandardShardingAlgorith
     private LocalTime parseLocalTime(final Comparable<?> endpoint) {
         return LocalTime.parse(getDateTimeText(endpoint).substring(0, dateTimePatternLength), dateTimeFormatter);
     }
-    
+
     private String getDateTimeText(final Comparable<?> endpoint) {
-        if (endpoint instanceof LocalDateTime || endpoint instanceof ZonedDateTime
-                || endpoint instanceof OffsetDateTime || endpoint instanceof LocalTime
-                || endpoint instanceof OffsetTime || endpoint instanceof JapaneseDate) {
+        if (endpoint instanceof ChronoLocalDateTime || endpoint instanceof ChronoZonedDateTime
+                || endpoint instanceof OffsetDateTime || endpoint instanceof ChronoLocalDate
+                || endpoint instanceof LocalTime || endpoint instanceof OffsetTime) {
             return dateTimeFormatter.format((TemporalAccessor) endpoint);
         }
         if (endpoint instanceof Instant) {