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 d34c0d1 Add ut and optimize the code (#11246)
d34c0d1 is described below
commit d34c0d11f8a0d79a7960a8fc133a3cf78e96d1ca
Author: zhaojinchao <[email protected]>
AuthorDate: Fri Jul 9 16:18:36 2021 +0800
Add ut and optimize the code (#11246)
Co-authored-by: zhaojinchao <[email protected]>
---
.../datetime/IntervalShardingAlgorithm.java | 3 +-
.../datetime/IntervalShardingAlgorithmTest.java | 46 ++++++++++++++++++++++
2 files changed, 47 insertions(+), 2 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 e93f903..7761aac 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
@@ -137,11 +137,10 @@ public final class IntervalShardingAlgorithm implements
StandardShardingAlgorith
LocalDateTime endTime = hasEndTime ?
parseDateTime(shardingValue.getValueRange().upperEndpoint().toString()) :
dateTimeUpper;
LocalDateTime calculateTime = startTime;
Set<String> result = new HashSet<>();
- while (!calculateTime.isAfter(endTime)) {
+ while (!calculateTime.isAfter(endTime) ||
calculateTime.format(tableSuffixPattern).equals(endTime.format(tableSuffixPattern)))
{
result.addAll(getMatchedTables(calculateTime,
availableTargetNames));
calculateTime = calculateTime.plus(stepAmount, stepUnit);
}
- result.addAll(getMatchedTables(endTime, availableTargetNames));
return result;
}
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 6f0f72b..d61b683 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
@@ -38,14 +38,19 @@ public final class IntervalShardingAlgorithmTest {
private final Collection<String> availableTablesForMonthDataSources = new
LinkedList<>();
+ private final Collection<String> availableTablesForDayDataSources = new
LinkedList<>();
+
private IntervalShardingAlgorithm shardingAlgorithmByQuarter;
private IntervalShardingAlgorithm shardingAlgorithmByMonth;
+ private IntervalShardingAlgorithm shardingAlgorithmByDay;
+
@Before
public void setup() {
initShardStrategyByMonth();
initShardStrategyByQuarter();
+ initShardingStrategyByDay();
}
private void initShardStrategyByQuarter() {
@@ -80,6 +85,21 @@ public final class IntervalShardingAlgorithmTest {
}
}
+ private void initShardingStrategyByDay() {
+ shardingAlgorithmByDay = new IntervalShardingAlgorithm();
+ shardingAlgorithmByDay.getProps().setProperty("datetime-pattern",
"yyyy-MM-dd HH:mm:ss");
+ shardingAlgorithmByDay.getProps().setProperty("datetime-lower",
"2021-06-01 00:00:00");
+ shardingAlgorithmByDay.getProps().setProperty("datetime-upper",
"2021-07-31 00:00:00");
+
shardingAlgorithmByDay.getProps().setProperty("sharding-suffix-pattern",
"yyyyMMdd");
+
shardingAlgorithmByDay.getProps().setProperty("datetime-interval-amount", "1");
+ shardingAlgorithmByDay.init();
+ for (int j = 6; j <= 7; j++) {
+ for (int i = 1; j == 6 ? i <= 30 : i <= 31; i++) {
+
availableTablesForDayDataSources.add(String.format("t_order_%04d%02d%02d",
2021, j, i));
+ }
+ }
+ }
+
@Test
public void assertPreciseDoShardingByQuarter() {
assertThat(shardingAlgorithmByQuarter.doSharding(availableTablesForQuarterDataSources,
new PreciseShardingValue<>("t_order", "create_time", "2020-01-01 00:00:01")),
is("t_order_202001"));
@@ -120,6 +140,32 @@ public final class IntervalShardingAlgorithmTest {
}
@Test
+ public void assertLowerHalfRangeDoShardingByDay() {
+ Collection<String> actual = shardingAlgorithmByDay.doSharding(
+ availableTablesForDayDataSources, new
RangeShardingValue<>("t_order", "create_time", Range.atLeast("2021-01-01
00:00:00")));
+ assertThat(actual.size(), is(61));
+ }
+
+ @Test
+ public void assertUpperHalfRangeDoShardingByDay() {
+ Collection<String> actual = shardingAlgorithmByDay.doSharding(
+ availableTablesForDayDataSources, new
RangeShardingValue<>("t_order", "create_time", Range.atMost("2021-07-31
01:00:00")));
+ assertThat(actual.size(), is(61));
+ }
+
+ @Test
+ public void assertPreciseDoShardingByDay() {
+
assertThat(shardingAlgorithmByDay.doSharding(availableTablesForDayDataSources,
new PreciseShardingValue<>("t_order", "create_time", "2021-07-01 00:00:01")),
is("t_order_20210701"));
+ }
+
+ @Test
+ public void assertRangeDoShardingByDay() {
+ Collection<String> actual = shardingAlgorithmByDay.doSharding(
+ availableTablesForDayDataSources, new
RangeShardingValue<>("t_order", "create_time", Range.closed("2021-06-15
00:00:00", "2021-07-31 01:00:00")));
+ assertThat(actual.size(), is(47));
+ }
+
+ @Test
public void assertFormat() {
String inputFormat = "yyyy-MM-dd HH:mm:ss.SSS";
String tableFormatByQuarter = "yyyyQQ";