You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/05/19 02:06:09 UTC
[shardingsphere] branch master updated: Add support for more JSR-310 related classes about JDBC Timestamp in IntervalShardingAlgorithm (#17754)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 800fcc89835 Add support for more JSR-310 related classes about JDBC Timestamp in IntervalShardingAlgorithm (#17754)
800fcc89835 is described below
commit 800fcc898353f4218afb67a3e1b2c2eb589b8fc6
Author: Ling Hengqian <li...@outlook.com>
AuthorDate: Thu May 19 10:06:02 2022 +0800
Add support for more JSR-310 related classes about JDBC Timestamp in IntervalShardingAlgorithm (#17754)
* Added unit tests for java.sql.Timestamp, java.time.Instant, java.time.OffsetDateTime, java.time.ZonedDateTime. IntervalShardingAlgorithm Added tests for java.time.Instant, java.time.OffsetDateTime, java.time.ZonedDateTime support.
* Fix CheckStyle.
* Remove unnecessary import.
* Fix Junit CheckStyle Error.
---
.../datetime/IntervalShardingAlgorithm.java | 13 +++++--
.../datetime/IntervalShardingAlgorithmTest.java | 44 +++++++++++++++++-----
2 files changed, 44 insertions(+), 13 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 f971f818a02..2105e9d5794 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
@@ -26,11 +26,15 @@ import org.apache.shardingsphere.sharding.api.sharding.standard.PreciseShardingV
import org.apache.shardingsphere.sharding.api.sharding.standard.RangeShardingValue;
import org.apache.shardingsphere.sharding.api.sharding.standard.StandardShardingAlgorithm;
+import java.time.Instant;
import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
import java.time.ZoneId;
+import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAccessor;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
@@ -157,11 +161,14 @@ public final class IntervalShardingAlgorithm implements StandardShardingAlgorith
}
private String getDateTimeText(final Comparable<?> endpoint) {
- if (endpoint instanceof LocalDateTime) {
- return ((LocalDateTime) endpoint).format(dateTimeFormatter);
+ if (endpoint instanceof LocalDateTime || endpoint instanceof ZonedDateTime || endpoint instanceof OffsetDateTime) {
+ return dateTimeFormatter.format((TemporalAccessor) endpoint);
+ }
+ if (endpoint instanceof Instant) {
+ return dateTimeFormatter.withZone(ZoneId.systemDefault()).format((Instant) endpoint);
}
if (endpoint instanceof Date) {
- return ((Date) endpoint).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().format(dateTimeFormatter);
+ return dateTimeFormatter.format(((Date) endpoint).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
}
return endpoint.toString();
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithmTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithmTest.java
index 40bd07a9814..f38b614009e 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithmTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/datetime/IntervalShardingAlgorithmTest.java
@@ -27,9 +27,13 @@ import org.apache.shardingsphere.sharding.factory.ShardingAlgorithmFactory;
import org.junit.Before;
import org.junit.Test;
+import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.LinkedList;
@@ -237,20 +241,40 @@ public final class IntervalShardingAlgorithmTest {
}
@Test
- public void assertLocalDateTimeWithZeroMillisecond() {
- Collection<String> actual = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ @SneakyThrows(ParseException.class)
+ public void assertTimestampInJDBCTypeWithZeroMillisecond() {
+ Collection<String> actualAsLocalDateTime = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
Range.closed(LocalDateTime.of(2021, 6, 15, 2, 25, 27), LocalDateTime.of(2021, 7, 31, 2, 25, 27))));
- assertThat(actual.size(), is(24));
- }
-
- @Test
- @SneakyThrows(ParseException.class)
- public void assertDateWithZeroMillisecond() {
+ assertThat(actualAsLocalDateTime.size(), is(24));
+ Collection<String> actualAsInstant = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
+ Range.closed(
+ LocalDateTime.of(2021, 6, 15, 2, 25, 27).atZone(ZoneId.systemDefault()).toInstant(),
+ LocalDateTime.of(2021, 7, 31, 2, 25, 27).atZone(ZoneId.systemDefault()).toInstant())));
+ assertThat(actualAsInstant.size(), is(24));
+ Collection<String> actualAsTimestamp = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
+ Range.closed(
+ Timestamp.valueOf(LocalDateTime.of(2021, 6, 15, 2, 25, 27)),
+ Timestamp.valueOf(LocalDateTime.of(2021, 7, 31, 2, 25, 27)))));
+ assertThat(actualAsTimestamp.size(), is(24));
+ Collection<String> actualAsOffsetDateTime = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
+ Range.closed(
+ OffsetDateTime.of(2021, 6, 15, 2, 25, 27, 0, OffsetDateTime.now().getOffset()),
+ OffsetDateTime.of(2021, 7, 31, 2, 25, 27, 0, OffsetDateTime.now().getOffset()))));
+ assertThat(actualAsOffsetDateTime.size(), is(24));
+ Collection<String> actualAsZonedDateTime = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
+ Range.closed(
+ ZonedDateTime.of(2021, 6, 15, 2, 25, 27, 0, ZoneId.systemDefault()),
+ ZonedDateTime.of(2021, 7, 31, 2, 25, 27, 0, ZoneId.systemDefault()))));
+ assertThat(actualAsZonedDateTime.size(), is(24));
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
- Collection<String> actual = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
+ Collection<String> actualAsDate = shardingAlgorithmByDayWithMillisecond.doSharding(availableTablesForDayWithMillisecondDataSources,
new RangeShardingValue<>("t_order", "create_time", DATA_NODE_INFO,
Range.closed(simpleDateFormat.parse("2021-06-15 02:25:27.000"), simpleDateFormat.parse("2021-07-31 02:25:27.000"))));
- assertThat(actual.size(), is(24));
+ assertThat(actualAsDate.size(), is(24));
}
}