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

zhaojinchao 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 ab7663641d8 Minor refactor for ProxyDatabaseConnectionManager and 
Proxy Handler (#32403)
ab7663641d8 is described below

commit ab7663641d8cd7c3a118276edf8be9999f0f1d14
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Aug 5 14:23:45 2024 +0800

    Minor refactor for ProxyDatabaseConnectionManager and Proxy Handler (#32403)
---
 .../backend/connector/ProxyDatabaseConnectionManager.java     | 11 ++++++++---
 .../proxy/backend/handler/distsql/rul/PreviewExecutor.java    |  7 +++----
 .../command/query/text/query/MySQLMultiStatementsHandler.java |  9 +++++----
 .../query/extended/PostgreSQLBatchedStatementsExecutor.java   |  4 ++--
 4 files changed, 18 insertions(+), 13 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
index c3d8b272de2..771d13f57b1 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
@@ -74,8 +74,9 @@ public final class ProxyDatabaseConnectionManager implements 
DatabaseConnectionM
                                            final ConnectionMode 
connectionMode) throws SQLException {
         Preconditions.checkNotNull(databaseName, "Current database name is 
null.");
         Collection<Connection> connections;
+        String cacheKey = getKey(databaseName, dataSourceName);
         synchronized (cachedConnections) {
-            connections = cachedConnections.get(databaseName.toLowerCase() + 
"." + dataSourceName);
+            connections = cachedConnections.get(cacheKey);
         }
         List<Connection> result;
         int maxConnectionSize = connectionOffset + connectionSize;
@@ -85,7 +86,7 @@ public final class ProxyDatabaseConnectionManager implements 
DatabaseConnectionM
             Collection<Connection> newConnections = 
createNewConnections(databaseName, dataSourceName, maxConnectionSize, 
connectionMode);
             result = new ArrayList<>(newConnections).subList(connectionOffset, 
maxConnectionSize);
             synchronized (cachedConnections) {
-                cachedConnections.putAll(databaseName.toLowerCase() + "." + 
dataSourceName, newConnections);
+                cachedConnections.putAll(cacheKey, newConnections);
             }
             executeTransactionHooksAfterCreateConnections(result);
         } else {
@@ -95,12 +96,16 @@ public final class ProxyDatabaseConnectionManager 
implements DatabaseConnectionM
             allConnections.addAll(newConnections);
             result = allConnections.subList(connectionOffset, 
maxConnectionSize);
             synchronized (cachedConnections) {
-                cachedConnections.putAll(databaseName.toLowerCase() + "." + 
dataSourceName, newConnections);
+                cachedConnections.putAll(cacheKey, newConnections);
             }
         }
         return result;
     }
     
+    private String getKey(final String databaseName, final String 
dataSourceName) {
+        return databaseName.toLowerCase() + "." + dataSourceName;
+    }
+    
     private void executeTransactionHooksAfterCreateConnections(final 
List<Connection> result) throws SQLException {
         if (connectionSession.getTransactionStatus().isInTransaction()) {
             for (TransactionHook each : transactionHooks) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
index 4c2722eb586..3e28fd16b4e 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
@@ -30,7 +30,6 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatem
 import org.apache.shardingsphere.infra.binder.context.type.CursorAvailable;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -133,7 +132,7 @@ public final class PreviewExecutor implements 
DistSQLQueryExecutor<PreviewStatem
     
     private Collection<ExecutionUnit> getFederationExecutionUnits(final 
QueryContext queryContext, final ShardingSphereMetaData metaData, final 
SQLFederationEngine federationEngine) {
         SQLStatement sqlStatement = 
queryContext.getSqlStatementContext().getSqlStatement();
-        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine(metaData.getProps());
+        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine(metaData);
         SQLFederationContext context = new SQLFederationContext(true, 
queryContext, metaData,
                 ((ProxyDatabaseConnectionManager) 
connectionContext.getDatabaseConnectionManager()).getConnectionSession().getProcessId());
         federationEngine.executeQuery(prepareEngine, 
createPreviewCallback(sqlStatement), context);
@@ -156,8 +155,8 @@ public final class PreviewExecutor implements 
DistSQLQueryExecutor<PreviewStatem
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
-    private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final ConfigurationProperties props) {
-        int maxConnectionsSizePerQuery = 
props.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+    private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final ShardingSphereMetaData metaData) {
+        int maxConnectionsSizePerQuery = 
metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connectionContext.getDatabaseConnectionManager(),
                 connectionContext.getExecutorStatementManager(), new 
StatementOption(false), database.getRuleMetaData().getRules(), 
database.getResourceMetaData().getStorageUnits());
     }
diff --git 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 6b51a238612..d0593275cbd 100644
--- 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -126,10 +126,11 @@ public final class MySQLMultiStatementsHandler implements 
ProxyBackendHandler {
     @Override
     public ResponseHeader execute() throws SQLException {
         Collection<ShardingSphereRule> rules = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getRuleMetaData().getRules();
-        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
metaDataContexts.getMetaData().getProps()
-                
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), 
connectionSession.getDatabaseConnectionManager(),
-                (JDBCBackendStatement) 
connectionSession.getStatementManager(), new StatementOption(false), rules,
-                
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
+        int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine =
+                new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
+                        (JDBCBackendStatement) 
connectionSession.getStatementManager(), new StatementOption(false), rules,
+                        
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
         return executeMultiStatements(prepareEngine);
     }
     
diff --git 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index 13ce35a677e..719d7867469 100644
--- 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -148,8 +148,8 @@ public final class PostgreSQLBatchedStatementsExecutor {
     
     private void addBatchedParametersToPreparedStatements() throws 
SQLException {
         Collection<ShardingSphereRule> rules = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getRuleMetaData().getRules();
-        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
-                
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
+        int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery,
                 connectionSession.getDatabaseConnectionManager(), 
(JDBCBackendStatement) connectionSession.getStatementManager(),
                 new StatementOption(false), rules, 
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
         executionGroupContext = 
prepareEngine.prepare(connectionSession.getUsedDatabaseName(), 
anyExecutionContext.getRouteContext(), executionUnitParams.keySet(),

Reply via email to