1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.metadata.statistics;
19
20 import lombok.EqualsAndHashCode;
21 import lombok.Getter;
22 import lombok.RequiredArgsConstructor;
23 import lombok.SneakyThrows;
24
25 import java.math.BigInteger;
26 import java.nio.charset.StandardCharsets;
27 import java.security.MessageDigest;
28 import java.util.List;
29
30
31
32
33 @RequiredArgsConstructor
34 @Getter
35 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
36 public final class ShardingSphereRowData {
37
38 @EqualsAndHashCode.Include
39 private final String uniqueKey;
40
41 private final List<Object> rows;
42
43 public ShardingSphereRowData(final List<Object> rows) {
44 uniqueKey = generateUniqueKey(rows);
45 this.rows = rows;
46 }
47
48 private String generateUniqueKey(final List<Object> rows) {
49 StringBuilder uniqueKeyText = new StringBuilder();
50 for (Object each : rows) {
51 if (null == each) {
52 uniqueKeyText.append('|');
53 } else {
54 uniqueKeyText.append(each).append('|');
55 }
56 }
57 return useMd5GenerateUniqueKey(uniqueKeyText);
58 }
59
60 @SneakyThrows
61 private String useMd5GenerateUniqueKey(final StringBuilder uniqueKeyText) {
62 MessageDigest md5 = MessageDigest.getInstance("MD5");
63 md5.update(StandardCharsets.UTF_8.encode(uniqueKeyText.toString()));
64 return String.format("%032x", new BigInteger(1, md5.digest()));
65 }
66 }