1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.driver.executor;
19
20 import lombok.Getter;
21 import org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
22 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
23 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
24 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
25 import org.apache.shardingsphere.infra.executor.sql.execute.engine.raw.RawExecutor;
26 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
27 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
28 import org.apache.shardingsphere.sqlfederation.engine.SQLFederationEngine;
29 import org.apache.shardingsphere.traffic.executor.TrafficExecutor;
30
31 import java.sql.SQLException;
32
33
34
35
36 @Getter
37 public final class DriverExecutor implements AutoCloseable {
38
39 private final DriverJDBCExecutor regularExecutor;
40
41 private final RawExecutor rawExecutor;
42
43 private final SQLFederationEngine sqlFederationEngine;
44
45 private final TrafficExecutor trafficExecutor;
46
47 public DriverExecutor(final ShardingSphereConnection connection) {
48 MetaDataContexts metaDataContexts = connection.getContextManager().getMetaDataContexts();
49 ExecutorEngine executorEngine = connection.getContextManager().getExecutorEngine();
50 JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine, connection.getDatabaseConnectionManager().getConnectionContext());
51 regularExecutor = new DriverJDBCExecutor(connection.getDatabaseName(), connection.getContextManager(), jdbcExecutor);
52 rawExecutor = new RawExecutor(executorEngine, connection.getDatabaseConnectionManager().getConnectionContext());
53 ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName());
54 String schemaName = new DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(connection.getDatabaseName());
55 sqlFederationEngine = new SQLFederationEngine(connection.getDatabaseName(), schemaName, metaDataContexts.getMetaData(), metaDataContexts.getStatistics(), jdbcExecutor);
56 trafficExecutor = new TrafficExecutor();
57 }
58
59
60
61
62
63
64 @Override
65 public void close() throws SQLException {
66 sqlFederationEngine.close();
67 trafficExecutor.close();
68 }
69 }