1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.broadcast.route;
19
20 import org.apache.shardingsphere.broadcast.constant.BroadcastOrder;
21 import org.apache.shardingsphere.broadcast.route.engine.BroadcastRouteEngineFactory;
22 import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
23 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
24 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
25 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
26 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
27 import org.apache.shardingsphere.infra.route.context.RouteContext;
28 import org.apache.shardingsphere.infra.route.lifecycle.EntranceSQLRouter;
29 import org.apache.shardingsphere.infra.session.query.QueryContext;
30
31 import java.util.Collection;
32
33
34
35
36 @HighFrequencyInvocation
37 public final class BroadcastSQLRouter implements EntranceSQLRouter<BroadcastRule> {
38
39 @Override
40 public RouteContext createRouteContext(final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database,
41 final BroadcastRule rule, final Collection<String> tableNames, final ConfigurationProperties props) {
42 Collection<String> broadcastTableNames = rule.getBroadcastTableNames(tableNames);
43 if (broadcastTableNames.isEmpty()) {
44 return new RouteContext();
45 }
46 return BroadcastRouteEngineFactory.newInstance(queryContext, broadcastTableNames).route(rule);
47 }
48
49 @Override
50 public Type getType() {
51 return Type.DATA_NODE;
52 }
53
54 @Override
55 public int getOrder() {
56 return BroadcastOrder.ORDER;
57 }
58
59 @Override
60 public Class<BroadcastRule> getTypeClass() {
61 return BroadcastRule.class;
62 }
63 }