This is an automated email from the ASF dual-hosted git repository.

wuweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new db80066  Encapsule ShardingSphereConnection.cachedConnections as inner 
field (#12917)
db80066 is described below

commit db80066f56d609329c4fc7a51f032520277a94c4
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Oct 7 18:16:09 2021 +0800

    Encapsule ShardingSphereConnection.cachedConnections as inner field (#12917)
    
    * Rename ShardingSphereConnection.schema
    
    * Fix test case
    
    * Fix test case
    
    * Move getRandomPhysicalDataSourceName to ShardingSphereConnection
    
    * Encapsule ShardingSphereConnection.cachedConnections as inner field
---
 .../driver/executor/DriverExecutor.java            |  4 +-
 .../jdbc/adapter/AbstractConnectionAdapter.java    |  5 --
 .../jdbc/adapter/AbstractResultSetAdapter.java     |  2 +-
 .../core/connection/ShardingSphereConnection.java  | 53 ++++++++++++++--------
 .../metadata/ShardingSphereDatabaseMetaData.java   | 27 +++--------
 .../statement/ShardingSpherePreparedStatement.java | 38 ++++++++--------
 .../core/statement/ShardingSphereStatement.java    | 36 +++++++--------
 .../driver/jdbc/adapter/ConnectionAdapterTest.java |  8 +---
 .../jdbc/adapter/PreparedStatementAdapterTest.java |  4 +-
 .../connection/ShardingSphereConnectionTest.java   | 43 +++++++-----------
 .../ShardingSphereDatabaseMetaDataTest.java        |  9 ++--
 .../UnsupportedOperationPreparedStatementTest.java |  4 +-
 12 files changed, 106 insertions(+), 127 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index 170c788..a3c4411 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -42,9 +42,9 @@ public final class DriverExecutor implements AutoCloseable {
     public DriverExecutor(final ShardingSphereConnection connection) {
         MetaDataContexts metaDataContexts = 
connection.getContextManager().getMetaDataContexts();
         JDBCExecutor jdbcExecutor = new 
JDBCExecutor(metaDataContexts.getExecutorEngine(), 
connection.isHoldTransaction());
-        regularExecutor = new DriverJDBCExecutor(connection.getSchemaName(), 
metaDataContexts, jdbcExecutor);
+        regularExecutor = new DriverJDBCExecutor(connection.getSchema(), 
metaDataContexts, jdbcExecutor);
         rawExecutor = new RawExecutor(metaDataContexts.getExecutorEngine(), 
connection.isHoldTransaction(), metaDataContexts.getProps());
-        federationExecutor = 
FederationExecutorFactory.newInstance(connection.getSchemaName(), 
metaDataContexts.getOptimizerContext(), metaDataContexts.getProps(), 
jdbcExecutor);
+        federationExecutor = 
FederationExecutorFactory.newInstance(connection.getSchema(), 
metaDataContexts.getOptimizerContext(), metaDataContexts.getProps(), 
jdbcExecutor);
     }
     
     /**
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractConnectionAdapter.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractConnectionAdapter.java
index 6ecd5e3..23a44bd 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractConnectionAdapter.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractConnectionAdapter.java
@@ -55,11 +55,6 @@ public abstract class AbstractConnectionAdapter extends 
AbstractUnsupportedOpera
     }
     
     @Override
-    public final String getSchema() {
-        return null;
-    }
-    
-    @Override
     public final void setSchema(final String schema) {
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
index fd429fc..df81c4e 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
@@ -68,7 +68,7 @@ public abstract class AbstractResultSetAdapter extends 
AbstractUnsupportedOperat
     private ShardingSphereMetaData getShardingSphereMetaData() {
         ShardingSphereConnection connection = statement instanceof 
ShardingSpherePreparedStatement
                 ? ((ShardingSpherePreparedStatement) 
statement).getConnection() : ((ShardingSphereStatement) 
statement).getConnection();
-        return 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName());
+        return 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema());
     }
     
     @Override
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index 114ec38..5f884d8 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -36,6 +36,7 @@ import 
org.apache.shardingsphere.transaction.TransactionHolder;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import javax.sql.DataSource;
+import java.security.SecureRandom;
 import java.sql.Array;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
@@ -47,6 +48,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.Random;
 
 /**
  * ShardingSphere Connection.
@@ -54,18 +56,19 @@ import java.util.Optional;
 public final class ShardingSphereConnection extends AbstractConnectionAdapter 
implements ExecutorJDBCManager {
     
     @Getter
-    private final String schemaName;
+    private final String schema;
     
     @Getter
     private final ContextManager contextManager;
     
-    private final ConnectionTransaction connectionTransaction;
-    
-    @Getter
     private final Multimap<String, Connection> cachedConnections = 
LinkedHashMultimap.create();
     
+    private final ConnectionTransaction connectionTransaction;
+    
     private final ForceExecuteTemplate<Connection> forceExecuteTemplate = new 
ForceExecuteTemplate<>();
     
+    private final Random random = new SecureRandom();
+    
     private boolean autoCommit = true;
     
     private boolean readOnly;
@@ -74,10 +77,10 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     
     private volatile boolean closed;
     
-    public ShardingSphereConnection(final String schemaName, final 
ContextManager contextManager) {
-        this.schemaName = schemaName;
+    public ShardingSphereConnection(final String schema, final ContextManager 
contextManager) {
+        this.schema = schema;
         this.contextManager = contextManager;
-        connectionTransaction = createConnectionTransaction(schemaName, 
contextManager);
+        connectionTransaction = createConnectionTransaction(schema, 
contextManager);
     }
     
     private ConnectionTransaction createConnectionTransaction(final String 
schemaName, final ContextManager contextManager) {
@@ -87,6 +90,16 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     }
     
     /**
+     * Get random physical data source name.
+     * 
+     * @return random physical data source name
+     */
+    public String getRandomPhysicalDataSourceName() {
+        Collection<String> datasourceNames = cachedConnections.isEmpty() ? 
contextManager.getDataSourceMap(schema).keySet() : cachedConnections.keySet();
+        return new 
ArrayList<>(datasourceNames).get(random.nextInt(datasourceNames.size()));
+    }
+    
+    /**
      * Get connection.
      *
      * @param dataSourceName data source name
@@ -99,11 +112,11 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     
     @Override
     public List<Connection> getConnections(final String dataSourceName, final 
int connectionSize, final ConnectionMode connectionMode) throws SQLException {
-        DataSource dataSource = 
contextManager.getDataSourceMap(schemaName).get(dataSourceName);
+        DataSource dataSource = 
contextManager.getDataSourceMap(schema).get(dataSourceName);
         Preconditions.checkState(null != dataSource, "Missing the data source 
name: '%s'", dataSourceName);
         Collection<Connection> connections;
-        synchronized (getCachedConnections()) {
-            connections = getCachedConnections().get(dataSourceName);
+        synchronized (cachedConnections) {
+            connections = cachedConnections.get(dataSourceName);
         }
         List<Connection> result;
         if (connections.size() >= connectionSize) {
@@ -113,13 +126,13 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
             result.addAll(connections);
             List<Connection> newConnections = 
createConnections(dataSourceName, dataSource, connectionSize - 
connections.size(), connectionMode);
             result.addAll(newConnections);
-            synchronized (getCachedConnections()) {
-                getCachedConnections().putAll(dataSourceName, newConnections);
+            synchronized (cachedConnections) {
+                cachedConnections.putAll(dataSourceName, newConnections);
             }
         } else {
             result = new ArrayList<>(createConnections(dataSourceName, 
dataSource, connectionSize, connectionMode));
-            synchronized (getCachedConnections()) {
-                getCachedConnections().putAll(dataSourceName, result);
+            synchronized (cachedConnections) {
+                cachedConnections.putAll(dataSourceName, result);
             }
         }
         return result;
@@ -252,7 +265,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     private void processLocalTransaction(final boolean autoCommit) throws 
SQLException {
         this.autoCommit = autoCommit;
         recordMethodInvocation(Connection.class, "setAutoCommit", new 
Class[]{boolean.class}, new Object[]{autoCommit});
-        forceExecuteTemplate.execute(getCachedConnections().values(), 
connection -> connection.setAutoCommit(autoCommit));
+        forceExecuteTemplate.execute(cachedConnections.values(), connection -> 
connection.setAutoCommit(autoCommit));
         if (!autoCommit) {
             TransactionHolder.setInTransaction();
         }
@@ -274,15 +287,15 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     }
     
     private void closeCachedConnections() throws SQLException {
-        forceExecuteTemplate.execute(getCachedConnections().values(), 
Connection::close);
-        getCachedConnections().clear();
+        forceExecuteTemplate.execute(cachedConnections.values(), 
Connection::close);
+        cachedConnections.clear();
     }
     
     @Override
     public void commit() throws SQLException {
         try {
             if (connectionTransaction.isLocalTransaction()) {
-                forceExecuteTemplate.execute(getCachedConnections().values(), 
Connection::commit);
+                forceExecuteTemplate.execute(cachedConnections.values(), 
Connection::commit);
             } else {
                 connectionTransaction.commit();
             }
@@ -295,7 +308,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     public void rollback() throws SQLException {
         try {
             if (connectionTransaction.isLocalTransaction()) {
-                forceExecuteTemplate.execute(getCachedConnections().values(), 
Connection::rollback);
+                forceExecuteTemplate.execute(cachedConnections.values(), 
Connection::rollback);
             } else {
                 connectionTransaction.rollback();
             }
@@ -306,7 +319,7 @@ public final class ShardingSphereConnection extends 
AbstractConnectionAdapter im
     
     @Override
     public Array createArrayOf(final String typeName, final Object[] elements) 
throws SQLException {
-        String dataSourceName = 
contextManager.getDataSourceMap(schemaName).keySet().iterator().next();
+        String dataSourceName = 
contextManager.getDataSourceMap(schema).keySet().iterator().next();
         Connection connection = getConnection(dataSourceName);
         return connection.createArrayOf(typeName, elements);
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
index 02b2645..2d4c39c 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
@@ -26,15 +26,12 @@ import 
org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
 
-import java.security.SecureRandom;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Optional;
-import java.util.Random;
 
 /**
  * ShardingSphere database meta data.
@@ -45,22 +42,17 @@ public final class ShardingSphereDatabaseMetaData extends 
AdaptedDatabaseMetaDat
     
     private final Collection<ShardingSphereRule> rules;
     
-    private final Collection<String> datasourceNames;
-    
     private final DataSourcesMetaData dataSourcesMetaData;
     
-    private final Random random = new SecureRandom();
-    
-    private String currentDataSourceName;
+    private String currentPhysicalDataSourceName;
     
     private DatabaseMetaData currentDatabaseMetaData;
     
     public ShardingSphereDatabaseMetaData(final ShardingSphereConnection 
connection) {
-        
super(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName()).getResource().getCachedDatabaseMetaData());
+        
super(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema()).getResource().getCachedDatabaseMetaData());
         this.connection = connection;
-        rules = 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName()).getRuleMetaData().getRules();
-        datasourceNames = 
connection.getContextManager().getDataSourceMap(connection.getSchemaName()).keySet();
-        dataSourcesMetaData = 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName()).getResource().getDataSourcesMetaData();
+        rules = 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema()).getRuleMetaData().getRules();
+        dataSourcesMetaData = 
connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema()).getResource().getDataSourcesMetaData();
     }
     
     @Override
@@ -238,15 +230,10 @@ public final class ShardingSphereDatabaseMetaData extends 
AdaptedDatabaseMetaDat
     }
     
     private String getDataSourceName() {
-        if (null == currentDataSourceName) {
-            currentDataSourceName = getRandomDataSourceName();
+        if (null == currentPhysicalDataSourceName) {
+            currentPhysicalDataSourceName = 
connection.getRandomPhysicalDataSourceName();
         }
-        return currentDataSourceName;
-    }
-    
-    private String getRandomDataSourceName() {
-        Collection<String> datasourceNames = 
connection.getCachedConnections().isEmpty() ? this.datasourceNames : 
connection.getCachedConnections().keySet();
-        return new 
ArrayList<>(datasourceNames).get(random.nextInt(datasourceNames.size()));
+        return currentPhysicalDataSourceName;
     }
     
     private DatabaseMetaData getDatabaseMetaData() throws SQLException {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 195b60b..93820c4 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -153,15 +153,15 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
         statements = new ArrayList<>();
         parameterSets = new ArrayList<>();
         ShardingSphereSQLParserEngine sqlParserEngine = new 
ShardingSphereSQLParserEngine(
-                
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType()),
 metaDataContexts.getProps());
+                
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
 metaDataContexts.getProps());
         sqlStatement = sqlParserEngine.parse(sql, true);
         parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
         statementOption = returnGeneratedKeys ? new StatementOption(true) : 
new StatementOption(resultSetType, resultSetConcurrency, resultSetHoldability);
         executor = new DriverExecutor(connection);
         JDBCExecutor jdbcExecutor = new 
JDBCExecutor(metaDataContexts.getExecutorEngine(), 
connection.isHoldTransaction());
-        batchPreparedStatementExecutor = new 
BatchPreparedStatementExecutor(metaDataContexts, jdbcExecutor, 
connection.getSchemaName());
+        batchPreparedStatementExecutor = new 
BatchPreparedStatementExecutor(metaDataContexts, jdbcExecutor, 
connection.getSchema());
         kernelProcessor = new KernelProcessor();
-        statementsCacheable = 
isStatementsCacheable(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getConfigurations());
+        statementsCacheable = 
isStatementsCacheable(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getConfigurations());
     }
     
     private boolean isStatementsCacheable(final Collection<RuleConfiguration> 
configurations) {
@@ -200,7 +200,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     }
     
     private List<QueryResult> executeQuery0() throws SQLException {
-        if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+        if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
             return 
executor.getRawExecutor().execute(createRawExecutionGroupContext(), 
executionContext.getLogicSQL(),
                     new RawSQLExecutorCallback()).stream().map(each -> 
(QueryResult) each).collect(Collectors.toList());
         }
@@ -210,7 +210,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionGroupContext();
         cacheStatements(executionGroupContext.getInputGroups());
         return 
executor.getRegularExecutor().executeQuery(executionGroupContext, 
executionContext.getLogicSQL(),
-                new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
 sqlStatement,
+                new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
 sqlStatement,
                         SQLExecutorExceptionHandler.isExceptionThrown()));
     }
     
@@ -218,7 +218,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (executionContext.getExecutionUnits().isEmpty()) {
             return Collections.emptyList();
         }
-        PreparedStatementExecuteQueryCallback callback = new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
+        PreparedStatementExecuteQueryCallback callback = new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
                  sqlStatement, 
SQLExecutorExceptionHandler.isExceptionThrown());
         return 
executor.getFederationExecutor().executeQuery(createDriverExecutionPrepareEngine(),
 callback, executionContext);
     }
@@ -226,7 +226,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine() {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery, connection, 
-                statementOption, 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules());
+                statementOption, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules());
     }
     
     @Override
@@ -238,7 +238,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             }
             clearPrevious();
             executionContext = createExecutionContext();
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 Collection<ExecuteResult> executeResults = 
executor.getRawExecutor().execute(createRawExecutionGroupContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback());
                 return accumulate(executeResults);
             }
@@ -261,7 +261,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private JDBCExecutorCallback<Integer> createExecuteUpdateCallback() {
         boolean isExceptionThrown = 
SQLExecutorExceptionHandler.isExceptionThrown();
-        return new 
JDBCExecutorCallback<Integer>(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
+        return new 
JDBCExecutorCallback<Integer>(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
             
             @Override
             protected Integer executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
@@ -284,7 +284,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             }
             clearPrevious();
             executionContext = createExecutionContext();
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 // TODO process getStatement
                 Collection<ExecuteResult> executeResults = 
executor.getRawExecutor().execute(createRawExecutionGroupContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback());
                 return executeResults.iterator().next() instanceof QueryResult;
@@ -304,7 +304,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext() throws SQLException {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules())
+        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules())
                 .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
     }
     
@@ -315,7 +315,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private JDBCExecutorCallback<Boolean> createExecuteCallback() {
         boolean isExceptionThrown = 
SQLExecutorExceptionHandler.isExceptionThrown();
-        return new 
JDBCExecutorCallback<Boolean>(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
+        return new 
JDBCExecutorCallback<Boolean>(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
             
             @Override
             protected Boolean executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
@@ -374,21 +374,21 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
     private ExecutionContext createExecutionContext() {
         LogicSQL logicSQL = createLogicSQL();
         
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), 
-                
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules(),
 connection.getSchemaName(), metaDataContexts.getMetaDataMap(), null);
-        ExecutionContext result = 
kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData(connection.getSchemaName()), 
metaDataContexts.getProps());
+                
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules(),
 connection.getSchema(), metaDataContexts.getMetaDataMap(), null);
+        ExecutionContext result = 
kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData(connection.getSchema()), 
metaDataContexts.getProps());
         findGeneratedKey(result).ifPresent(generatedKey -> 
generatedValues.addAll(generatedKey.getGeneratedValues()));
         return result;
     }
     
     private LogicSQL createLogicSQL() {
         List<Object> parameters = new ArrayList<>(getParameters());
-        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(), 
parameters, sqlStatement, connection.getSchemaName());
+        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(), 
parameters, sqlStatement, connection.getSchema());
         return new LogicSQL(sqlStatementContext, sql, parameters);
     }
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
-        ShardingSphereMetaData metaData = 
metaDataContexts.getMetaData(connection.getSchemaName());
-        MergeEngine mergeEngine = new MergeEngine(connection.getSchemaName(), 
metaData.getResource().getDatabaseType(), metaData.getSchema(),
+        ShardingSphereMetaData metaData = 
metaDataContexts.getMetaData(connection.getSchema());
+        MergeEngine mergeEngine = new MergeEngine(connection.getSchema(), 
metaData.getResource().getDatabaseType(), metaData.getSchema(),
                 metaDataContexts.getProps(), 
metaData.getRuleMetaData().getRules());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
@@ -464,7 +464,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private void initBatchPreparedStatementExecutor() throws SQLException {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new DriverExecutionPrepareEngine<>(
                 JDBCDriverType.PREPARED_STATEMENT, 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
-                connection, statementOption, 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules());
+                connection, statementOption, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules());
         
batchPreparedStatementExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(),
                 new 
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits()).stream().map(BatchExecutionUnit::getExecutionUnit).collect(Collectors.toList())));
         setBatchParametersForStatements();
@@ -506,7 +506,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     @Override
     public boolean isAccumulate() {
-        return 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(
+        return 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(
             each -> each instanceof DataNodeContainedRule && 
((DataNodeContainedRule) 
each).isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()));
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 62a694d..299a6aa 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -149,7 +149,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     }
     
     private List<QueryResult> executeQuery0() throws SQLException {
-        if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+        if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
             return 
executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(),
                     new RawSQLExecutorCallback()).stream().map(each -> 
(QueryResult) each).collect(Collectors.toList());
         }
@@ -158,7 +158,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionContext();
         cacheStatements(executionGroupContext.getInputGroups());
-        StatementExecuteQueryCallback callback = new 
StatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
+        StatementExecuteQueryCallback callback = new 
StatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
                 executionContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
         return 
executor.getRegularExecutor().executeQuery(executionGroupContext, 
executionContext.getLogicSQL(), callback);
     }
@@ -167,7 +167,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         if (executionContext.getExecutionUnits().isEmpty()) {
             return Collections.emptyList();
         }
-        StatementExecuteQueryCallback callback = new 
StatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
+        StatementExecuteQueryCallback callback = new 
StatementExecuteQueryCallback(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
                 executionContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
         return 
executor.getFederationExecutor().executeQuery(createDriverExecutionPrepareEngine(),
 callback, executionContext);
     }
@@ -175,14 +175,14 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine() {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connection, 
-                statementOption, 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules());
+                statementOption, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules());
     }
     
     @Override
     public int executeUpdate(final String sql) throws SQLException {
         try {
             executionContext = createExecutionContext(sql);
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 return 
accumulate(executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback()));
             }
             ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionContext();
@@ -201,7 +201,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         try {
             executionContext = createExecutionContext(sql);
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 return 
accumulate(executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback()));
             }
             ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionContext();
@@ -218,7 +218,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             executionContext = createExecutionContext(sql);
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 return 
accumulate(executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback()));
             }
             ExecutionGroupContext<JDBCExecutionUnit> executionGroups = 
createExecutionContext();
@@ -235,7 +235,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             executionContext = createExecutionContext(sql);
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 return 
accumulate(executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback()));
             }
             ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionContext();
@@ -251,7 +251,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                               final SQLStatementContext<?> 
sqlStatementContext, final Collection<RouteUnit> routeUnits) throws 
SQLException {
         boolean isExceptionThrown = 
SQLExecutorExceptionHandler.isExceptionThrown();
         JDBCExecutorCallback<Integer> callback = new 
JDBCExecutorCallback<Integer>(
-                
metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
 sqlStatementContext.getSqlStatement(), isExceptionThrown) {
+                
metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
 sqlStatementContext.getSqlStatement(), isExceptionThrown) {
             
             @Override
             protected Integer executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
@@ -303,7 +303,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                             final SQLStatement sqlStatement, final 
Collection<RouteUnit> routeUnits) throws SQLException {
         boolean isExceptionThrown = 
SQLExecutorExceptionHandler.isExceptionThrown();
         JDBCExecutorCallback<Boolean> jdbcExecutorCallback = new 
JDBCExecutorCallback<Boolean>(
-                
metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
+                
metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType(),
 sqlStatement, isExceptionThrown) {
             
             @Override
             protected Boolean executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
@@ -321,7 +321,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private boolean execute0(final String sql, final ExecuteCallback callback) 
throws SQLException {
         try {
             executionContext = createExecutionContext(sql);
-            if 
(metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
+            if 
(metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(each
 -> each instanceof RawExecutionRule)) {
                 // TODO process getStatement
                 Collection<ExecuteResult> results = 
executor.getRawExecutor().execute(createRawExecutionContext(), 
executionContext.getLogicSQL(), new RawSQLExecutorCallback());
                 return results.iterator().next() instanceof QueryResult;
@@ -347,10 +347,10 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private LogicSQL createLogicSQL(final String sql) {
         ShardingSphereSQLParserEngine sqlParserEngine = new 
ShardingSphereSQLParserEngine(
-                
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchemaName()).getResource().getDatabaseType()),
 metaDataContexts.getProps());
+                
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
 metaDataContexts.getProps());
         SQLStatement sqlStatement = sqlParserEngine.parse(sql, false);
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(), 
Collections.emptyList(), sqlStatement,
-                connection.getSchemaName());
+                connection.getSchema());
         return new LogicSQL(sqlStatementContext, sql, Collections.emptyList());
     }
     
@@ -358,8 +358,8 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         clearStatements();
         LogicSQL logicSQL = createLogicSQL(sql);
         
SQLCheckEngine.check(logicSQL.getSqlStatementContext().getSqlStatement(), 
logicSQL.getParameters(), 
-                
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules(),
 connection.getSchemaName(), metaDataContexts.getMetaDataMap(), null);
-        return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData(connection.getSchemaName()), 
metaDataContexts.getProps());
+                
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules(),
 connection.getSchema(), metaDataContexts.getMetaDataMap(), null);
+        return kernelProcessor.generateExecutionContext(logicSQL, 
metaDataContexts.getMetaData(connection.getSchema()), 
metaDataContexts.getProps());
     }
     
     private ExecutionGroupContext<JDBCExecutionUnit> createExecutionContext() 
throws SQLException {
@@ -369,7 +369,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionContext() throws SQLException {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules())
+        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules())
                 .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
     }
     
@@ -427,7 +427,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     }
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
-        ShardingSphereMetaData metaData = 
metaDataContexts.getMetaData(connection.getSchemaName());
+        ShardingSphereMetaData metaData = 
metaDataContexts.getMetaData(connection.getSchema());
         MergeEngine mergeEngine = new MergeEngine(DefaultSchema.LOGIC_NAME, 
metaData.getResource().getDatabaseType(), metaData.getSchema(),
                 metaDataContexts.getProps(), 
metaData.getRuleMetaData().getRules());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
@@ -452,7 +452,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     @Override
     public boolean isAccumulate() {
-        return 
metaDataContexts.getMetaData(connection.getSchemaName()).getRuleMetaData().getRules().stream().anyMatch(
+        return 
metaDataContexts.getMetaData(connection.getSchema()).getRuleMetaData().getRules().stream().anyMatch(
             each -> each instanceof DataNodeContainedRule && 
((DataNodeContainedRule) 
each).isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()));
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
index d4aa093..c43e5cd3 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ConnectionAdapterTest.java
@@ -71,15 +71,11 @@ public final class ConnectionAdapterTest {
     }
     
     @Test
-    public void assertGetSchema() throws SQLException {
-        assertNull(createConnectionAdaptor().getSchema());
-    }
-    
-    @Test
     public void assertSetSchema() throws SQLException {
         Connection actual = createConnectionAdaptor();
+        String originalSchema = actual.getSchema();
         actual.setSchema("");
-        assertNull(actual.getSchema());
+        assertThat(actual.getSchema(), is(originalSchema));
     }
     
     private Connection createConnectionAdaptor() {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
index 3802bed..6f742bb 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
@@ -56,8 +56,8 @@ public final class PreparedStatementAdapterTest {
     @Before
     public void setUp() throws SQLException {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
-        when(connection.getSchemaName()).thenReturn(DefaultSchema.LOGIC_NAME);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName()).getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
+        when(connection.getSchema()).thenReturn(DefaultSchema.LOGIC_NAME);
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema()).getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
         
when(connection.getContextManager().getMetaDataContexts().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
index 0eb2572..7ea676c 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
@@ -45,7 +45,6 @@ import javax.sql.DataSource;
 import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -54,7 +53,6 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -102,7 +100,6 @@ public final class ShardingSphereConnectionTest {
         
when(contextManager.getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
         
when(contextManager.getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(TransactionRule.class)).thenReturn(Optional.empty());
         connection = new ShardingSphereConnection(DefaultSchema.LOGIC_NAME, 
contextManager);
-        connection = new ShardingSphereConnection(DefaultSchema.LOGIC_NAME, 
contextManager);
     }
     
     @After
@@ -140,10 +137,9 @@ public final class ShardingSphereConnectionTest {
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(contextManager.getTransactionContexts()).thenReturn(transactionContexts);
         
when(contextManager.getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
-        
when(contextManager.getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
         TransactionRule transactionRule = new TransactionRule(new 
TransactionRuleConfiguration("XA", null));
         
when(contextManager.getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(TransactionRule.class)).thenReturn(Optional.of(transactionRule));
-        connection = new ShardingSphereConnection(connection.getSchemaName(), 
contextManager);
+        connection = new ShardingSphereConnection(connection.getSchema(), 
contextManager);
         connection.setAutoCommit(false);
         
assertTrue(XAShardingSphereTransactionManagerFixture.getInvocations().contains(TransactionOperationType.BEGIN));
         connection.commit();
@@ -158,10 +154,9 @@ public final class ShardingSphereConnectionTest {
         
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(contextManager.getTransactionContexts()).thenReturn(transactionContexts);
         
when(contextManager.getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
-        
when(contextManager.getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
         TransactionRule transactionRule = new TransactionRule(new 
TransactionRuleConfiguration("BASE", null));
         
when(contextManager.getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(TransactionRule.class)).thenReturn(Optional.of(transactionRule));
-        connection = new ShardingSphereConnection(connection.getSchemaName(), 
contextManager);
+        connection = new ShardingSphereConnection(connection.getSchema(), 
contextManager);
         connection.setAutoCommit(false);
         
assertTrue(BASEShardingSphereTransactionManagerFixture.getInvocations().contains(TransactionOperationType.BEGIN));
         connection.commit();
@@ -171,25 +166,21 @@ public final class ShardingSphereConnectionTest {
     }
     
     @Test
-    public void assertIsValid() throws SQLException {
-        Connection primaryConnection = mock(Connection.class);
-        Connection upReplicaConnection = mock(Connection.class);
-        Connection downReplicaConnection = mock(Connection.class);
-        when(primaryConnection.isValid(anyInt())).thenReturn(true);
-        when(upReplicaConnection.isValid(anyInt())).thenReturn(true);
-        when(downReplicaConnection.isValid(anyInt())).thenReturn(false);
-        connection.getCachedConnections().put("test_primary", 
primaryConnection);
-        connection.getCachedConnections().put("test_replica_up", 
upReplicaConnection);
+    public void assertIsValidWhenEmptyConnection() throws SQLException {
         assertTrue(connection.isValid(0));
-        connection.getCachedConnections().put("test_replica_down", 
downReplicaConnection);
+    }
+    
+    @Test
+    public void assertIsInvalid() throws SQLException {
+        connection.getConnection("test_replica_ds");
         assertFalse(connection.isValid(0));
     }
     
     @Test
     public void assertSetReadOnly() throws SQLException {
-        Connection connection = mock(Connection.class);
-        ShardingSphereConnection actual = 
createShardingSphereConnection(connection);
+        ShardingSphereConnection actual = createShardingSphereConnection();
         assertFalse(actual.isReadOnly());
+        Connection connection = actual.getConnection("test_replica_ds");
         actual.setReadOnly(true);
         assertTrue(actual.isReadOnly());
         verify(connection).setReadOnly(true);
@@ -202,8 +193,8 @@ public final class ShardingSphereConnectionTest {
     
     @Test
     public void assertSetTransactionIsolation() throws SQLException {
-        Connection connection = mock(Connection.class);
-        ShardingSphereConnection actual = 
createShardingSphereConnection(connection);
+        ShardingSphereConnection actual = createShardingSphereConnection();
+        Connection connection = actual.getConnection("test_replica_ds");
         actual.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
         
verify(connection).setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
     }
@@ -218,7 +209,7 @@ public final class ShardingSphereConnectionTest {
     
     @Test
     public void assertClose() throws SQLException {
-        ShardingSphereConnection actual = 
createShardingSphereConnection(mock(Connection.class));
+        ShardingSphereConnection actual = createShardingSphereConnection();
         actual.close();
         assertTrue(actual.isClosed());
         assertTrue(getCachedConnections(actual).isEmpty());
@@ -226,7 +217,7 @@ public final class ShardingSphereConnectionTest {
     
     @Test
     public void assertCloseShouldNotClearTransactionType() throws SQLException 
{
-        ShardingSphereConnection actual = 
createShardingSphereConnection(mock(Connection.class));
+        ShardingSphereConnection actual = createShardingSphereConnection();
         TransactionTypeHolder.set(TransactionType.XA);
         actual.close();
         assertTrue(actual.isClosed());
@@ -234,11 +225,9 @@ public final class ShardingSphereConnectionTest {
         assertThat(TransactionTypeHolder.get(), is(TransactionType.XA));
     }
     
-    private ShardingSphereConnection createShardingSphereConnection(final 
Connection... connections) {
+    private ShardingSphereConnection createShardingSphereConnection() {
         ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
         
when(contextManager.getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(TransactionRule.class)).thenReturn(Optional.empty());
-        ShardingSphereConnection result = new 
ShardingSphereConnection(DefaultSchema.LOGIC_NAME, contextManager);
-        result.getCachedConnections().putAll("", Arrays.asList(connections));
-        return result;
+        return new ShardingSphereConnection(DefaultSchema.LOGIC_NAME, 
contextManager);
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 624a424..1c3363e 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -17,13 +17,12 @@
 
 package org.apache.shardingsphere.driver.jdbc.core.datasource.metadata;
 
-import com.google.common.collect.LinkedHashMultimap;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import 
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.database.DefaultSchema;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.CachedDatabaseMetaData;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
@@ -90,13 +89,13 @@ public final class ShardingSphereDatabaseMetaDataTest {
         when(connection.getMetaData()).thenReturn(databaseMetaData);
         
when(resultSet.getMetaData()).thenReturn(mock(ResultSetMetaData.class));
         CachedDatabaseMetaData cachedDatabaseMetaData = new 
CachedDatabaseMetaData(databaseMetaData);
-        
when(shardingSphereConnection.getCachedConnections()).thenReturn(LinkedHashMultimap.create());
+        
when(shardingSphereConnection.getRandomPhysicalDataSourceName()).thenReturn(DATA_SOURCE_NAME);
         
when(shardingSphereConnection.getConnection(anyString())).thenReturn(connection);
         
when(shardingSphereConnection.getContextManager().getMetaDataContexts()).thenReturn(metaDataContexts);
         
when(shardingSphereConnection.getContextManager().getDataSourceMap(DefaultSchema.LOGIC_NAME)).thenReturn(dataSourceMap);
-        
when(shardingSphereConnection.getSchemaName()).thenReturn(DefaultSchema.LOGIC_NAME);
+        
when(shardingSphereConnection.getSchema()).thenReturn(DefaultSchema.LOGIC_NAME);
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(metaDataContexts.getMetaData(shardingSphereConnection.getSchemaName())).thenReturn(metaData);
+        
when(metaDataContexts.getMetaData(shardingSphereConnection.getSchema())).thenReturn(metaData);
         
when(metaData.getResource().getCachedDatabaseMetaData()).thenReturn(cachedDatabaseMetaData);
         ShardingRule shardingRule = mockShardingRule();
         
when(metaData.getRuleMetaData().getRules()).thenReturn(Collections.singleton(shardingRule));
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
index 21a7da9..06bd955 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
@@ -42,8 +42,8 @@ public final class UnsupportedOperationPreparedStatementTest {
     @Before
     public void setUp() throws SQLException {
         ShardingSphereConnection connection = 
mock(ShardingSphereConnection.class, RETURNS_DEEP_STUBS);
-        when(connection.getSchemaName()).thenReturn(DefaultSchema.LOGIC_NAME);
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchemaName()).getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
+        when(connection.getSchema()).thenReturn(DefaultSchema.LOGIC_NAME);
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData(connection.getSchema()).getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
         
when(connection.getContextManager().getMetaDataContexts().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
     }

Reply via email to