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

sunnianjun 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 d040c3b91e3 Refactor DriverExecutionPrepareEngine (#28189)
d040c3b91e3 is described below

commit d040c3b91e3a137c0416dbfbbf80ce2dc86c9deb
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Aug 20 23:35:31 2023 +0800

    Refactor DriverExecutionPrepareEngine (#28189)
    
    * Refactor usage of StorageUnitMetaData.unitNodeMappers
    
    * Refactor DriverExecutionPrepareEngine
---
 .../sql/prepare/driver/DriverExecutionPrepareEngine.java   | 14 ++++++++------
 .../core/statement/ShardingSpherePreparedStatement.java    |  4 ++--
 .../jdbc/core/statement/ShardingSphereStatement.java       |  2 +-
 .../proxy/backend/connector/DatabaseConnector.java         |  2 +-
 .../proxy/backend/connector/ProxySQLExecutor.java          |  2 +-
 .../backend/handler/distsql/rul/sql/PreviewExecutor.java   |  2 +-
 .../admin/OpenGaussSystemCatalogAdminQueryExecutor.java    |  2 +-
 .../query/text/query/MySQLMultiStatementsHandler.java      |  2 +-
 .../extended/PostgreSQLBatchedStatementsExecutor.java      |  2 +-
 9 files changed, 17 insertions(+), 15 deletions(-)

diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
index 8212310f6b7..848b7efd42a 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.DriverExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.AbstractExecutionPrepareEngine;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnitMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
@@ -54,17 +55,17 @@ public final class DriverExecutionPrepareEngine<T extends 
DriverExecutionUnit<?>
     @SuppressWarnings("rawtypes")
     private final SQLExecutionUnitBuilder sqlExecutionUnitBuilder;
     
-    private final Map<String, DatabaseType> databaseTypes;
+    private final StorageUnitMetaData storageUnitMetaData;
     
     public DriverExecutionPrepareEngine(final String type, final int 
maxConnectionsSizePerQuery, final DatabaseConnectionManager<C> 
databaseConnectionManager,
                                         final ExecutorStatementManager<C, ?, 
?> statementManager, final StorageResourceOption option, final 
Collection<ShardingSphereRule> rules,
-                                        final Map<String, DatabaseType> 
databaseTypes) {
+                                        final StorageUnitMetaData 
storageUnitMetaData) {
         super(maxConnectionsSizePerQuery, rules);
         this.databaseConnectionManager = databaseConnectionManager;
         this.statementManager = statementManager;
         this.option = option;
         sqlExecutionUnitBuilder = getCachedSqlExecutionUnitBuilder(type);
-        this.databaseTypes = databaseTypes;
+        this.storageUnitMetaData = storageUnitMetaData;
     }
     
     /**
@@ -95,10 +96,11 @@ public final class DriverExecutionPrepareEngine<T extends 
DriverExecutionUnit<?>
     
     @SuppressWarnings("unchecked")
     private ExecutionGroup<T> createExecutionGroup(final String 
dataSourceName, final List<SQLUnit> sqlUnits, final C connection, final 
ConnectionMode connectionMode) throws SQLException {
-        List<T> result = new LinkedList<>();
+        List<T> inputs = new LinkedList<>();
+        DatabaseType databaseType = 
storageUnitMetaData.getStorageUnits().get(dataSourceName).getStorageType();
         for (SQLUnit each : sqlUnits) {
-            result.add((T) sqlExecutionUnitBuilder.build(new 
ExecutionUnit(dataSourceName, each), statementManager, connection, 
connectionMode, option, databaseTypes.get(dataSourceName)));
+            inputs.add((T) sqlExecutionUnitBuilder.build(new 
ExecutionUnit(dataSourceName, each), statementManager, connection, 
connectionMode, option, databaseType));
         }
-        return new ExecutionGroup<>(result);
+        return new ExecutionGroup<>(inputs);
     }
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 0743313513d..4557cfc16b0 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -323,7 +323,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager,
                 statementOption, 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
     }
     
     @Override
@@ -664,7 +664,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
metaDataContexts.getMetaData().getProps()
                 
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), 
connection.getDatabaseConnectionManager(), statementManager, statementOption,
                 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
         List<ExecutionUnit> executionUnits = new 
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits().size());
         for (BatchExecutionUnit each : 
batchPreparedStatementExecutor.getBatchExecutionUnits()) {
             ExecutionUnit executionUnit = each.getExecutionUnit();
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index a004bfd0415..a0fdfb4bd0b 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -240,7 +240,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager, statementOption,
                 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index 6ed19a8b914..3e5e126e96e 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -251,7 +251,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         JDBCBackendStatement statementManager = (JDBCBackendStatement) 
databaseConnectionManager.getConnectionSession().getStatementManager();
         return new DriverExecutionPrepareEngine<>(driverType, 
maxConnectionsSizePerQuery, databaseConnectionManager, statementManager,
                 new StatementOption(isReturnGeneratedKeys), 
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getRuleMetaData().getRules(),
-                
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
     }
     
     private ResponseHeader processExecuteFederation(final ResultSet resultSet, 
final MetaDataContexts metaDataContexts) throws SQLException {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 9357d97cbba..f97904426a3 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -204,7 +204,7 @@ public final class ProxySQLExecutor {
         JDBCBackendStatement statementManager = (JDBCBackendStatement) 
databaseConnectionManager.getConnectionSession().getStatementManager();
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new DriverExecutionPrepareEngine<>(
                 type, maxConnectionsSizePerQuery, databaseConnectionManager, 
statementManager, new StatementOption(isReturnGeneratedKeys), rules,
-                
ProxyContext.getInstance().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
ProxyContext.getInstance().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext;
         try {
             executionGroupContext = 
prepareEngine.prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(),
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
index 130d9b44e22..7c6db81c6f5 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
@@ -168,7 +168,7 @@ public final class PreviewExecutor implements 
ConnectionSessionRequiredRULExecut
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
                 (JDBCBackendStatement) 
connectionSession.getStatementManager(), new 
StatementOption(isReturnGeneratedKeys),
                 
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getRuleMetaData().getRules(),
-                
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getResourceMetaData().getStorageUnitMetaData());
     }
     
     private String getDatabaseName(final ConnectionSession connectionSession) {
diff --git 
a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
 
b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
index d970a30712c..7ef0dac7a86 100644
--- 
a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
+++ 
b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
@@ -100,7 +100,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutor 
implements DatabaseA
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
                 connectionSession.getStatementManager(), new 
StatementOption(false),
                 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
     }
     
     private JDBCExecutorCallback<ExecuteResult> 
createOpenGaussSystemCatalogAdminQueryCallback(final DatabaseType protocolType, 
final ResourceMetaData resourceMetaData,
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 b451a85d9da..7cf088c7b45 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
@@ -140,7 +140,7 @@ public final class MySQLMultiStatementsHandler implements 
ProxyBackendHandler {
         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.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
samplingExecutionUnit(),
                 new 
ExecutionGroupReportContext(connectionSession.getProcessId(), 
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : 
executionGroupContext.getInputGroups()) {
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 8ee8cf0de6c..e771a94df73 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
@@ -151,7 +151,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_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.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+                new StatementOption(false), rules, 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
         executionGroupContext = 
prepareEngine.prepare(anyExecutionContext.getRouteContext(), 
executionUnitParams.keySet(),
                 new 
ExecutionGroupReportContext(connectionSession.getProcessId(), 
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : 
executionGroupContext.getInputGroups()) {

Reply via email to