1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sqlfederation.rule;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
22 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
23 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
24 import org.apache.shardingsphere.sqlfederation.api.config.SQLFederationRuleConfiguration;
25 import org.apache.shardingsphere.sqlfederation.optimizer.context.OptimizerContext;
26 import org.apache.shardingsphere.sqlfederation.optimizer.context.OptimizerContextFactory;
27
28 import java.util.Map;
29 import java.util.concurrent.atomic.AtomicReference;
30
31
32
33
34 @Getter
35 public final class SQLFederationRule implements GlobalRule {
36
37 private final SQLFederationRuleConfiguration configuration;
38
39 private final AtomicReference<OptimizerContext> optimizerContext;
40
41 private final RuleAttributes attributes;
42
43 public SQLFederationRule(final SQLFederationRuleConfiguration ruleConfig, final Map<String, ShardingSphereDatabase> databases) {
44 configuration = ruleConfig;
45 optimizerContext = new AtomicReference<>(OptimizerContextFactory.create(databases));
46 attributes = new RuleAttributes();
47 }
48
49 @Override
50 public void refresh(final Map<String, ShardingSphereDatabase> databases, final GlobalRuleChangedType changedType) {
51 optimizerContext.set(OptimizerContextFactory.create(databases));
52 }
53
54
55
56
57
58
59 public OptimizerContext getOptimizerContext() {
60 return optimizerContext.get();
61 }
62 }