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 5c394e431be Refactor DriverExecutor (#31422)
5c394e431be is described below

commit 5c394e431be890ea478dc07a85034a27cb6dc545
Author: Liang Zhang <[email protected]>
AuthorDate: Tue May 28 12:21:32 2024 +0800

    Refactor DriverExecutor (#31422)
---
 .../driver/executor/DriverExecutor.java            | 51 ++++++++--------------
 .../statement/ShardingSpherePreparedStatement.java |  3 +-
 2 files changed, 19 insertions(+), 35 deletions(-)

diff --git 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index ad349f07178..5c6136bf646 100644
--- 
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ 
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -93,40 +93,27 @@ public final class DriverExecutor implements AutoCloseable {
                                                    final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine) 
throws SQLException {
         Optional<String> trafficInstanceId = 
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
 queryContext);
         if (trafficInstanceId.isPresent()) {
-            TrafficExecutorCallback<ResultSet> trafficCallback = 
JDBCDriverType.STATEMENT.equals(prepareEngine.getType())
-                    ? Statement::executeQuery
-                    : ((statement, sql) -> ((PreparedStatement) 
statement).executeQuery());
-            return 
Optional.of(trafficExecutor.execute(connection.getProcessId(), 
database.getName(), trafficInstanceId.get(), queryContext, prepareEngine, 
trafficCallback));
+            return Optional.of(trafficExecutor.execute(
+                    connection.getProcessId(), database.getName(), 
trafficInstanceId.get(), queryContext, prepareEngine, 
getTrafficExecutorCallback(prepareEngine)));
         }
         if (sqlFederationEngine.decide(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), database, metaData.getGlobalRuleMetaData())) {
-            ExecuteQueryCallback sqlFederationCallback = 
JDBCDriverType.STATEMENT.equals(prepareEngine.getType())
-                    ? new 
StatementExecuteQueryCallback(database.getProtocolType(), 
database.getResourceMetaData(),
-                            
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown())
-                    : new 
PreparedStatementExecuteQueryCallback(database.getProtocolType(),
-                            database.getResourceMetaData(), 
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
-            return Optional.of(sqlFederationEngine.executeQuery(prepareEngine, 
sqlFederationCallback, new SQLFederationContext(false, queryContext, metaData, 
connection.getProcessId())));
+            return Optional.of(sqlFederationEngine.executeQuery(
+                    prepareEngine, getSQLFederationCallback(database, 
queryContext, prepareEngine), new SQLFederationContext(false, queryContext, 
metaData, connection.getProcessId())));
         }
         return Optional.empty();
     }
     
-    /**
-     * Execute advance update.
-     *
-     * @param metaData meta data
-     * @param database database
-     * @param queryContext query context
-     * @param prepareEngine prepare engine
-     * @return updated row count
-     * @throws SQLException SQL exception
-     */
-    public Optional<Integer> executeAdvanceUpdate(final ShardingSphereMetaData 
metaData, final ShardingSphereDatabase database, final QueryContext 
queryContext,
-                                                  final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine) 
throws SQLException {
-        Optional<String> trafficInstanceId = 
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
 queryContext);
-        if (trafficInstanceId.isPresent()) {
-            return 
Optional.of(trafficExecutor.execute(connection.getProcessId(), 
database.getName(),
-                    trafficInstanceId.get(), queryContext, prepareEngine, 
(statement, sql) -> ((PreparedStatement) statement).executeUpdate()));
-        }
-        return Optional.empty();
+    private TrafficExecutorCallback<ResultSet> 
getTrafficExecutorCallback(final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine) {
+        return JDBCDriverType.STATEMENT.equals(prepareEngine.getType()) ? 
Statement::executeQuery : ((statement, sql) -> ((PreparedStatement) 
statement).executeQuery());
+    }
+    
+    private ExecuteQueryCallback getSQLFederationCallback(final 
ShardingSphereDatabase database, final QueryContext queryContext,
+                                                          final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine) {
+        return JDBCDriverType.STATEMENT.equals(prepareEngine.getType())
+                ? new 
StatementExecuteQueryCallback(database.getProtocolType(), 
database.getResourceMetaData(),
+                        
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown())
+                : new 
PreparedStatementExecuteQueryCallback(database.getProtocolType(), 
database.getResourceMetaData(),
+                        
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
     }
     
     /**
@@ -171,12 +158,8 @@ public final class DriverExecutor implements AutoCloseable 
{
         }
         if (sqlFederationEngine.decide(queryContext.getSqlStatementContext(), 
queryContext.getParameters(), database, metaData.getGlobalRuleMetaData())) {
             executeType = ExecuteType.FEDERATION;
-            ExecuteQueryCallback sqlFederationCallback = 
JDBCDriverType.STATEMENT.equals(prepareEngine.getType())
-                    ? new 
StatementExecuteQueryCallback(database.getProtocolType(), 
database.getResourceMetaData(),
-                            
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown())
-                    : new 
PreparedStatementExecuteQueryCallback(database.getProtocolType(), 
database.getResourceMetaData(),
-                            
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
-            ResultSet resultSet = 
sqlFederationEngine.executeQuery(prepareEngine, sqlFederationCallback, new 
SQLFederationContext(false, queryContext, metaData, connection.getProcessId()));
+            ResultSet resultSet = sqlFederationEngine.executeQuery(
+                    prepareEngine, getSQLFederationCallback(database, 
queryContext, prepareEngine), new SQLFederationContext(false, queryContext, 
metaData, connection.getProcessId()));
             return Optional.of(null != resultSet);
         }
         return Optional.empty();
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 35bf260aeda..9bb56e20c94 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
@@ -295,7 +295,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             QueryContext queryContext = createQueryContext();
             
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
             ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-            Optional<Integer> updatedCount = 
executor.executeAdvanceUpdate(metaDataContexts.getMetaData(), database, 
queryContext, createDriverExecutionPrepareEngine(database));
+            Optional<Integer> updatedCount = 
executor.executeAdvanceUpdate(metaDataContexts.getMetaData(), database, 
queryContext, createDriverExecutionPrepareEngine(database),
+                    (statement, sql) -> ((PreparedStatement) 
statement).executeUpdate());
             if (updatedCount.isPresent()) {
                 return updatedCount.get();
             }

Reply via email to