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();
     }

Reply via email to