1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.route.engine;
19
20 import lombok.RequiredArgsConstructor;
21 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
22 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
23 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
24 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
25 import org.apache.shardingsphere.infra.route.context.RouteContext;
26 import org.apache.shardingsphere.infra.route.engine.impl.AllSQLRouteExecutor;
27 import org.apache.shardingsphere.infra.route.engine.impl.PartialSQLRouteExecutor;
28 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
29 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
30 import org.apache.shardingsphere.infra.session.query.QueryContext;
31 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
32 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTableStatusStatement;
33 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
34
35 import java.util.Collection;
36
37
38
39
40 @HighFrequencyInvocation
41 @RequiredArgsConstructor
42 public final class SQLRouteEngine {
43
44 private final Collection<ShardingSphereRule> rules;
45
46 private final ConfigurationProperties props;
47
48
49
50
51
52
53
54
55
56
57 public RouteContext route(final ConnectionContext connectionContext, final QueryContext queryContext, final RuleMetaData globalRuleMetaData, final ShardingSphereDatabase database) {
58 SQLRouteExecutor executor = isNeedAllSchemas(queryContext.getSqlStatementContext().getSqlStatement()) ? new AllSQLRouteExecutor() : new PartialSQLRouteExecutor(rules, props);
59 return executor.route(connectionContext, queryContext, globalRuleMetaData, database);
60 }
61
62
63 private boolean isNeedAllSchemas(final SQLStatement sqlStatement) {
64 return sqlStatement instanceof MySQLShowTablesStatement || sqlStatement instanceof MySQLShowTableStatusStatement;
65 }
66 }