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 <[email protected]>
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) {

Reply via email to