1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.proxy.backend.mysql.handler.admin;
19
20 import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
21 import org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
22 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
23 import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
24 import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutorCreator;
25 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.MySQLKillProcessExecutor;
26 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.MySQLSetVariableAdminExecutor;
27 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.MySQLUseDatabaseExecutor;
28 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.factory.MySQLSelectAdminExecutorFactory;
29 import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.factory.MySQLShowAdminExecutorFactory;
30 import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
31 import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.SetStatement;
32 import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLKillStatement;
33 import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLUseStatement;
34
35 import java.util.List;
36 import java.util.Optional;
37
38
39
40
41 public final class MySQLAdminExecutorCreator implements DatabaseAdminExecutorCreator {
42
43 @Override
44 public Optional<DatabaseAdminExecutor> create(final SQLStatementContext sqlStatementContext, final String sql, final String databaseName, final List<Object> parameters) {
45 if (sqlStatementContext instanceof SelectStatementContext) {
46 return MySQLSelectAdminExecutorFactory.newInstance((SelectStatementContext) sqlStatementContext, sql, parameters, databaseName,
47 ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData());
48 }
49 SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
50 Optional<DatabaseAdminExecutor> showExecutor = MySQLShowAdminExecutorFactory.newInstance(sqlStatement);
51 if (showExecutor.isPresent()) {
52 return showExecutor;
53 }
54 if (sqlStatement instanceof MySQLUseStatement) {
55 return Optional.of(new MySQLUseDatabaseExecutor((MySQLUseStatement) sqlStatement));
56 }
57 if (sqlStatement instanceof MySQLKillStatement) {
58 return Optional.of(new MySQLKillProcessExecutor((MySQLKillStatement) sqlStatement));
59 }
60 if (sqlStatement instanceof SetStatement) {
61 return Optional.of(new MySQLSetVariableAdminExecutor((SetStatement) sqlStatement));
62 }
63 return Optional.empty();
64 }
65
66 @Override
67 public String getDatabaseType() {
68 return "MySQL";
69 }
70 }