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";

Reply via email to