This is an automated email from the ASF dual-hosted git repository.
yx9o 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 13084c2492b Spilt DriverExecutorFacade and DriverExecuteBatchExecutor
(#31611)
13084c2492b is described below
commit 13084c2492bc9aeb37525ba542b25f4bde7f45e7
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jun 6 23:29:49 2024 +0800
Spilt DriverExecutorFacade and DriverExecuteBatchExecutor (#31611)
* Spilt DriverExecutorFacade and DriverExecuteBatchExecutor
* Spilt DriverExecutorFacade and DriverExecuteBatchExecutor
---
.../driver/executor/DriverExecutorFacade.java | 70 ++--------------------
.../{engine => }/DriverExecuteBatchExecutor.java | 2 +-
.../statement/ShardingSpherePreparedStatement.java | 28 +++++++--
.../core/statement/ShardingSphereStatement.java | 3 +-
4 files changed, 32 insertions(+), 71 deletions(-)
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutorFacade.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutorFacade.java
index b49ef803c10..f71b20303c5 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutorFacade.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutorFacade.java
@@ -17,12 +17,9 @@
package org.apache.shardingsphere.driver.executor;
-import
org.apache.shardingsphere.driver.executor.batch.engine.DriverExecuteBatchExecutor;
import
org.apache.shardingsphere.driver.executor.callback.add.StatementAddCallback;
import
org.apache.shardingsphere.driver.executor.callback.execute.StatementExecuteCallback;
import
org.apache.shardingsphere.driver.executor.callback.execute.StatementExecuteUpdateCallback;
-import
org.apache.shardingsphere.driver.executor.callback.keygen.GeneratedKeyCallback;
-import
org.apache.shardingsphere.driver.executor.callback.replay.PreparedStatementParametersReplayCallback;
import
org.apache.shardingsphere.driver.executor.callback.replay.StatementReplayCallback;
import org.apache.shardingsphere.driver.executor.engine.DriverExecuteExecutor;
import
org.apache.shardingsphere.driver.executor.engine.DriverExecuteQueryExecutor;
@@ -30,14 +27,12 @@ import
org.apache.shardingsphere.driver.executor.engine.DriverExecuteUpdateExecu
import org.apache.shardingsphere.driver.executor.engine.DriverJDBCExecutor;
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.database.core.type.DatabaseTypeRegistry;
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.engine.raw.RawExecutor;
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;
@@ -49,7 +44,6 @@ import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
-import java.util.Collection;
import java.util.Map;
import java.util.Optional;
@@ -76,18 +70,7 @@ public final class DriverExecutorFacade implements
AutoCloseable {
private final DriverExecuteExecutor executeExecutor;
- private final DriverExecuteBatchExecutor executeBatchExecutor;
-
- public DriverExecutorFacade(final ShardingSphereConnection connection,
final StatementOption statementOption, final StatementManager statementManager)
{
- this(connection, statementOption, statementManager, null,
JDBCDriverType.STATEMENT);
- }
-
- public DriverExecutorFacade(final ShardingSphereConnection connection,
final StatementOption statementOption, final StatementManager statementManager,
final ShardingSphereDatabase database) {
- this(connection, statementOption, statementManager, database,
JDBCDriverType.PREPARED_STATEMENT);
- }
-
- private DriverExecutorFacade(final ShardingSphereConnection connection,
final StatementOption statementOption, final StatementManager statementManager,
- final ShardingSphereDatabase database, final
String jdbcDriverType) {
+ public DriverExecutorFacade(final ShardingSphereConnection connection,
final StatementOption statementOption, final StatementManager statementManager,
final String jdbcDriverType) {
this.connection = connection;
this.statementOption = statementOption;
this.statementManager = statementManager;
@@ -102,7 +85,6 @@ public final class DriverExecutorFacade implements
AutoCloseable {
queryExecutor = new DriverExecuteQueryExecutor(connection, metaData,
regularExecutor, rawExecutor, trafficExecutor, sqlFederationEngine);
updateExecutor = new DriverExecuteUpdateExecutor(connection, metaData,
regularExecutor, rawExecutor, trafficExecutor);
executeExecutor = new DriverExecuteExecutor(connection, metaData,
regularExecutor, rawExecutor, trafficExecutor, sqlFederationEngine);
- executeBatchExecutor = null == database ? null : new
DriverExecuteBatchExecutor(connection, metaData, database, jdbcExecutor);
}
/**
@@ -160,46 +142,6 @@ public final class DriverExecutorFacade implements
AutoCloseable {
return executeExecutor.execute(database, queryContext, prepareEngine,
executeCallback, addCallback, replayCallback);
}
- /**
- * Get result set.
- *
- * @return result set
- */
- public Optional<ResultSet> getResultSet() {
- return executeExecutor.getResultSet();
- }
-
- /**
- * Add batch.
- *
- * @param queryContext query context
- * @param database database
- */
- public void addBatch(final QueryContext queryContext, final
ShardingSphereDatabase database) {
- executeBatchExecutor.addBatch(queryContext, database);
- }
-
- /**
- * Execute batch.
- *
- * @param database database
- * @param sqlStatementContext SQL statement context
- * @param generatedValues generated values
- * @param statementOption statement option
- * @param addCallback statement add callback
- * @param replayCallback prepared statement parameters replay callback
- * @param generatedKeyCallback generated key callback
- * @return generated keys
- * @throws SQLException SQL exception
- */
- @SuppressWarnings("rawtypes")
- public int[] executeBatch(final ShardingSphereDatabase database, final
SQLStatementContext sqlStatementContext, final Collection<Comparable<?>>
generatedValues,
- final StatementOption statementOption, final
StatementAddCallback addCallback, final
PreparedStatementParametersReplayCallback replayCallback,
- final GeneratedKeyCallback generatedKeyCallback)
throws SQLException {
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = createDriverExecutionPrepareEngine(database, jdbcDriverType);
- return executeBatchExecutor.executeBatch(database,
sqlStatementContext, generatedValues, statementOption, prepareEngine,
addCallback, replayCallback, generatedKeyCallback);
- }
-
private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
createDriverExecutionPrepareEngine(final ShardingSphereDatabase database, final
String jdbcDriverType) {
int maxConnectionsSizePerQuery =
connection.getContextManager().getMetaDataContexts().getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new DriverExecutionPrepareEngine<>(jdbcDriverType,
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(),
statementManager, statementOption,
@@ -207,12 +149,12 @@ public final class DriverExecutorFacade implements
AutoCloseable {
}
/**
- * Clear.
+ * Get result set.
+ *
+ * @return result set
*/
- public void clear() {
- if (null != executeBatchExecutor) {
- executeBatchExecutor.clear();
- }
+ public Optional<ResultSet> getResultSet() {
+ return executeExecutor.getResultSet();
}
@Override
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/engine/DriverExecuteBatchExecutor.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
similarity index 99%
rename from
jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/engine/DriverExecuteBatchExecutor.java
rename to
jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
index 29493307d80..999b5980be6 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/engine/DriverExecuteBatchExecutor.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/batch/DriverExecuteBatchExecutor.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.driver.executor.batch.engine;
+package org.apache.shardingsphere.driver.executor.batch;
import lombok.Getter;
import
org.apache.shardingsphere.driver.executor.batch.statement.BatchExecutionUnit;
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 b95b3343c82..a65a9775406 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
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.driver.jdbc.core.statement;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.shardingsphere.driver.executor.DriverExecutorFacade;
+import
org.apache.shardingsphere.driver.executor.batch.DriverExecuteBatchExecutor;
import
org.apache.shardingsphere.driver.executor.callback.add.StatementAddCallback;
import
org.apache.shardingsphere.driver.jdbc.adapter.AbstractPreparedStatementAdapter;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
@@ -34,13 +35,18 @@ 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;
import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -59,6 +65,7 @@ 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;
@@ -100,6 +107,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
private final DriverExecutorFacade driverExecutorFacade;
+ private final DriverExecuteBatchExecutor executeBatchExecutor;
+
private final Collection<Comparable<?>> generatedValues = new
LinkedList<>();
private final boolean statementsCacheable;
@@ -156,7 +165,10 @@ 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();
- driverExecutorFacade = new DriverExecutorFacade(connection,
statementOption, statementManager, database);
+ 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()));
statementsCacheable =
isStatementsCacheable(database.getRuleMetaData());
selectContainsEnhancedTable = sqlStatementContext instanceof
SelectStatementContext && ((SelectStatementContext)
sqlStatementContext).isContainsEnhancedTable();
}
@@ -188,7 +200,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
handleExceptionInTransaction(connection, metaData);
throw SQLExceptionTransformEngine.toSQLException(ex,
metaData.getDatabase(databaseName).getProtocolType());
} finally {
- driverExecutorFacade.clear();
+ executeBatchExecutor.clear();
clearParameters();
}
}
@@ -367,7 +379,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
public void addBatch() {
currentResultSet = null;
QueryContext queryContext = createQueryContext();
- driverExecutorFacade.addBatch(queryContext,
metaData.getDatabase(databaseName));
+ executeBatchExecutor.addBatch(queryContext,
metaData.getDatabase(databaseName));
findGeneratedKey().ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
clearParameters();
}
@@ -376,7 +388,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
public int[] executeBatch() throws SQLException {
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
try {
- return driverExecutorFacade.executeBatch(database,
sqlStatementContext, generatedValues, statementOption,
+ return executeBatchExecutor.executeBatch(database,
sqlStatementContext, generatedValues, statementOption,
createDriverExecutionPrepareEngine(database),
(StatementAddCallback<PreparedStatement>) (statements,
parameterSets) -> this.statements.addAll(statements),
this::replaySetParameter,
() -> {
@@ -393,10 +405,16 @@ 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;
- driverExecutorFacade.clear();
+ executeBatchExecutor.clear();
clearParameters();
}
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 499e2581744..067a0fe6dd2 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -41,6 +41,7 @@ import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEn
import
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
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.jdbc.JDBCDriverType;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import org.apache.shardingsphere.infra.hint.SQLHintUtils;
@@ -109,7 +110,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
statements = new LinkedList<>();
statementOption = new StatementOption(resultSetType,
resultSetConcurrency, resultSetHoldability);
statementManager = new StatementManager();
- driverExecutorFacade = new DriverExecutorFacade(connection,
statementOption, statementManager);
+ driverExecutorFacade = new DriverExecutorFacade(connection,
statementOption, statementManager, JDBCDriverType.STATEMENT);
batchStatementExecutor = new BatchStatementExecutor(this);
databaseName = connection.getDatabaseName();
}