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;