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

zhangliang 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 8e63c21a3d0 Refactor DriverExecuteBatchExecutor (#31612)
8e63c21a3d0 is described below

commit 8e63c21a3d045170d6e72fabeb69322c456b7f3d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 7 00:13:06 2024 +0800

    Refactor DriverExecuteBatchExecutor (#31612)
---
 .../executor/batch/DriverExecuteBatchExecutor.java | 28 +++++++++++++++-------
 .../statement/ShardingSpherePreparedStatement.java | 17 +++----------
 2 files changed, 22 insertions(+), 23 deletions(-)

diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
index 999b5980be6..ec92a9f60da 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
@@ -24,7 +24,9 @@ import 
org.apache.shardingsphere.driver.executor.callback.add.StatementAddCallba
 import 
org.apache.shardingsphere.driver.executor.callback.keygen.GeneratedKeyCallback;
 import 
org.apache.shardingsphere.driver.executor.callback.replay.PreparedStatementParametersReplayCallback;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
+import org.apache.shardingsphere.driver.jdbc.core.statement.StatementManager;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
 import org.apache.shardingsphere.infra.executor.audit.SQLAuditEngine;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
@@ -34,6 +36,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.DriverExecutionPrepareEngine;
+import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriverType;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -65,12 +68,23 @@ public final class DriverExecuteBatchExecutor {
     @Getter
     private final BatchPreparedStatementExecutor 
batchPreparedStatementExecutor;
     
+    private final DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine;
+    
     private ExecutionContext executionContext;
     
-    public DriverExecuteBatchExecutor(final ShardingSphereConnection 
connection, final ShardingSphereMetaData metaData, final ShardingSphereDatabase 
database, final JDBCExecutor jdbcExecutor) {
+    public DriverExecuteBatchExecutor(final ShardingSphereConnection 
connection, final ShardingSphereMetaData metaData, final ShardingSphereDatabase 
database, final JDBCExecutor jdbcExecutor,
+                                      final StatementOption statementOption, 
final StatementManager statementManager) {
         this.connection = connection;
         this.metaData = metaData;
         batchPreparedStatementExecutor = new 
BatchPreparedStatementExecutor(database, jdbcExecutor, 
connection.getProcessId());
+        prepareEngine = createDriverExecutionPrepareEngine(statementOption, 
statementManager, database);
+    }
+    
+    private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final StatementOption statementOption, final 
StatementManager statementManager,
+                                                                               
                            final ShardingSphereDatabase database) {
+        int maxConnectionsSizePerQuery = 
connection.getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+        return new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager, statementOption,
+                database.getRuleMetaData().getRules(), 
database.getResourceMetaData().getStorageUnits());
     }
     
     /**
@@ -102,7 +116,6 @@ public final class DriverExecuteBatchExecutor {
      * @param sqlStatementContext SQL statement context
      * @param generatedValues generated values
      * @param statementOption statement option
-     * @param prepareEngine prepare engine
      * @param addCallback statement add callback
      * @param replayCallback prepared statement parameters replay callback
      * @param generatedKeyCallback generated key callback
@@ -111,24 +124,22 @@ public final class DriverExecuteBatchExecutor {
      */
     @SuppressWarnings("rawtypes")
     public int[] executeBatch(final ShardingSphereDatabase database, final 
SQLStatementContext sqlStatementContext, final Collection<Comparable<?>> 
generatedValues,
-                              final StatementOption statementOption, final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
-                              final StatementAddCallback addCallback, final 
PreparedStatementParametersReplayCallback replayCallback,
+                              final StatementOption statementOption, final 
StatementAddCallback addCallback, final 
PreparedStatementParametersReplayCallback replayCallback,
                               final GeneratedKeyCallback generatedKeyCallback) 
throws SQLException {
         if (null == executionContext) {
             return new int[0];
         }
         // TODO add raw SQL executor
         return doExecuteBatch(database, batchPreparedStatementExecutor,
-                sqlStatementContext, generatedValues, statementOption, 
prepareEngine, executionContext, addCallback, replayCallback, 
generatedKeyCallback);
+                sqlStatementContext, generatedValues, statementOption, 
executionContext, addCallback, replayCallback, generatedKeyCallback);
     }
     
     @SuppressWarnings({"rawtypes", "unchecked"})
     private int[] doExecuteBatch(final ShardingSphereDatabase database, final 
BatchPreparedStatementExecutor batchExecutor,
                                  final SQLStatementContext 
sqlStatementContext, final Collection<Comparable<?>> generatedValues, final 
StatementOption statementOption,
-                                 final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine, 
final ExecutionContext executionContext,
-                                 final StatementAddCallback addCallback, final 
PreparedStatementParametersReplayCallback replayCallback,
+                                 final ExecutionContext executionContext, 
final StatementAddCallback addCallback, final 
PreparedStatementParametersReplayCallback replayCallback,
                                  final GeneratedKeyCallback 
generatedKeyCallback) throws SQLException {
-        initBatchPreparedStatementExecutor(database, batchExecutor, 
prepareEngine, executionContext, replayCallback);
+        initBatchPreparedStatementExecutor(database, batchExecutor, 
executionContext, replayCallback);
         int[] result = batchExecutor.executeBatch(sqlStatementContext);
         if (statementOption.isReturnGeneratedKeys() && 
generatedValues.isEmpty()) {
             addCallback.add(batchExecutor.getStatements(), 
Collections.emptyList());
@@ -138,7 +149,6 @@ public final class DriverExecuteBatchExecutor {
     }
     
     private void initBatchPreparedStatementExecutor(final 
ShardingSphereDatabase database, final BatchPreparedStatementExecutor 
batchExecutor,
-                                                    final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
                                                     final ExecutionContext 
executionContext, final PreparedStatementParametersReplayCallback 
replayCallback) throws SQLException {
         List<ExecutionUnit> executionUnits = new 
ArrayList<>(batchExecutor.getBatchExecutionUnits().size());
         for (BatchExecutionUnit each : batchExecutor.getBatchExecutionUnits()) 
{
diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index a65a9775406..07b61fe5c36 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -35,17 +35,14 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
-import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.database.core.keygen.GeneratedKeyColumnProvider;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
 import 
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.stream.JDBCStreamQueryResult;
-import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.DriverExecutionPrepareEngine;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriverType;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
 import org.apache.shardingsphere.infra.hint.HintManager;
@@ -65,7 +62,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
 import org.apache.shardingsphere.transaction.util.AutoCommitUtils;
 
-import java.sql.Connection;
 import java.sql.ParameterMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -165,10 +161,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         statementOption = returnGeneratedKeys ? new StatementOption(true, 
columns) : new StatementOption(resultSetType, resultSetConcurrency, 
resultSetHoldability);
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         statementManager = new StatementManager();
+        JDBCExecutor jdbcExecutor = new 
JDBCExecutor(connection.getContextManager().getExecutorEngine(), 
connection.getDatabaseConnectionManager().getConnectionContext());
         driverExecutorFacade = new DriverExecutorFacade(connection, 
statementOption, statementManager, JDBCDriverType.PREPARED_STATEMENT);
-        executeBatchExecutor = null == database ? null
-                : new DriverExecuteBatchExecutor(connection, metaData, 
database,
-                        new 
JDBCExecutor(connection.getContextManager().getExecutorEngine(), 
connection.getDatabaseConnectionManager().getConnectionContext()));
+        executeBatchExecutor = new DriverExecuteBatchExecutor(connection, 
metaData, database, jdbcExecutor, statementOption, statementManager);
         statementsCacheable = 
isStatementsCacheable(database.getRuleMetaData());
         selectContainsEnhancedTable = sqlStatementContext instanceof 
SelectStatementContext && ((SelectStatementContext) 
sqlStatementContext).isContainsEnhancedTable();
     }
@@ -388,7 +383,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     public int[] executeBatch() throws SQLException {
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         try {
-            return executeBatchExecutor.executeBatch(database, 
sqlStatementContext, generatedValues, statementOption, 
createDriverExecutionPrepareEngine(database),
+            return executeBatchExecutor.executeBatch(database, 
sqlStatementContext, generatedValues, statementOption,
                     (StatementAddCallback<PreparedStatement>) (statements, 
parameterSets) -> this.statements.addAll(statements),
                     this::replaySetParameter,
                     () -> {
@@ -405,12 +400,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         }
     }
     
-    private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final ShardingSphereDatabase database) {
-        int maxConnectionsSizePerQuery = 
connection.getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager, statementOption,
-                database.getRuleMetaData().getRules(), 
database.getResourceMetaData().getStorageUnits());
-    }
-    
     @Override
     public void clearBatch() {
         currentResultSet = null;

Reply via email to