1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.hint;
19
20 import com.google.common.base.Joiner;
21 import com.google.common.collect.ArrayListMultimap;
22 import com.google.common.collect.Multimap;
23 import lombok.Getter;
24 import lombok.Setter;
25
26 import java.util.Collection;
27 import java.util.LinkedHashSet;
28 import java.util.Optional;
29
30
31
32
33 @Getter
34 @Setter
35 public final class HintValueContext {
36
37 private final Multimap<String, Comparable<?>> shardingDatabaseValues = ArrayListMultimap.create();
38
39 private final Multimap<String, Comparable<?>> shardingTableValues = ArrayListMultimap.create();
40
41 private final Collection<String> disableAuditNames = new LinkedHashSet<>();
42
43 private String dataSourceName = "";
44
45 private boolean databaseShardingOnly;
46
47 private boolean writeRouteOnly;
48
49 private boolean useTraffic;
50
51 private boolean skipSQLRewrite;
52
53 private boolean shadow;
54
55
56
57
58
59
60 public Optional<String> findHintDataSourceName() {
61 return dataSourceName.isEmpty() ? Optional.empty() : Optional.of(dataSourceName);
62 }
63
64
65
66
67
68
69
70 public boolean containsHintShardingDatabaseValue(final String tableName) {
71 String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
72 return shardingDatabaseValues.containsKey(key) || shardingDatabaseValues.containsKey(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
73 }
74
75
76
77
78
79
80
81 public boolean containsHintShardingTableValue(final String tableName) {
82 String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
83 return shardingTableValues.containsKey(key) || shardingTableValues.containsKey(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
84 }
85
86
87
88
89
90
91
92 public boolean containsHintShardingValue(final String tableName) {
93 return containsHintShardingDatabaseValue(tableName) || containsHintShardingTableValue(tableName);
94 }
95
96
97
98
99
100
101
102 public Collection<Comparable<?>> getHintShardingTableValue(final String tableName) {
103 String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
104 return shardingTableValues.containsKey(key)
105 ? shardingTableValues.get(key)
106 : shardingTableValues.get(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
107 }
108
109
110
111
112
113
114
115 public Collection<Comparable<?>> getHintShardingDatabaseValue(final String tableName) {
116 String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
117 return shardingDatabaseValues.containsKey(key)
118 ? shardingDatabaseValues.get(key)
119 : shardingDatabaseValues.get(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
120 }
121 }