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 448a4336cce Refactor DriverExecutor (#31446)
448a4336cce is described below

commit 448a4336ccef6b2f47bf2c95ad3f63de4dfdd009
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 30 13:49:06 2024 +0800

    Refactor DriverExecutor (#31446)
---
 .../driver/executor/DriverExecutor.java            | 47 +++++++++-------------
 .../statement/ShardingSpherePreparedStatement.java |  2 +-
 .../core/statement/ShardingSphereStatement.java    |  2 +-
 3 files changed, 22 insertions(+), 29 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 09c30d141a8..10878e41d36 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
@@ -115,7 +115,7 @@ public final class DriverExecutor implements AutoCloseable {
     }
     
     /**
-     * Execute advance query.
+     * Execute query.
      *
      * @param metaData meta data
      * @param database database
@@ -128,9 +128,9 @@ public final class DriverExecutor implements AutoCloseable {
      * @throws SQLException SQL exception
      */
     @SuppressWarnings("rawtypes")
-    public ResultSet executeAdvanceQuery(final ShardingSphereMetaData 
metaData, final ShardingSphereDatabase database, final QueryContext 
queryContext,
-                                         final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine, 
final Statement statement,
-                                         final Map<String, Integer> 
columnLabelAndIndexMap, final StatementReplayCallback statementReplayCallback) 
throws SQLException {
+    public ResultSet executeQuery(final ShardingSphereMetaData metaData, final 
ShardingSphereDatabase database, final QueryContext queryContext,
+                                  final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine, 
final Statement statement,
+                                  final Map<String, Integer> 
columnLabelAndIndexMap, final StatementReplayCallback statementReplayCallback) 
throws SQLException {
         Optional<String> trafficInstanceId = 
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
 queryContext);
         if (trafficInstanceId.isPresent()) {
             return trafficExecutor.execute(
@@ -140,7 +140,15 @@ public final class DriverExecutor implements AutoCloseable 
{
             return sqlFederationEngine.executeQuery(
                     prepareEngine, getExecuteQueryCallback(database, 
queryContext, prepareEngine.getType()), new SQLFederationContext(false, 
queryContext, metaData, connection.getProcessId()));
         }
-        return doExecuteQuery(metaData, database, queryContext, prepareEngine, 
statement, columnLabelAndIndexMap, statementReplayCallback);
+        List<QueryResult> queryResults = executePushDownQuery(metaData, 
database, queryContext, prepareEngine, statementReplayCallback);
+        MergedResult mergedResult = mergeQuery(metaData, database, 
queryResults, queryContext.getSqlStatementContext());
+        boolean selectContainsEnhancedTable = 
queryContext.getSqlStatementContext() instanceof SelectStatementContext
+                && ((SelectStatementContext) 
queryContext.getSqlStatementContext()).isContainsEnhancedTable();
+        List<ResultSet> resultSets = getResultSets();
+        return new ShardingSphereResultSet(resultSets, mergedResult, 
statement, selectContainsEnhancedTable, queryContext.getSqlStatementContext(),
+                null == columnLabelAndIndexMap
+                        ? 
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(queryContext.getSqlStatementContext(),
 selectContainsEnhancedTable, resultSets.get(0).getMetaData())
+                        : columnLabelAndIndexMap);
     }
     
     private TrafficExecutorCallback<ResultSet> 
getTrafficExecuteQueryCallback(final String jdbcDriverType) {
@@ -155,25 +163,10 @@ public final class DriverExecutor implements 
AutoCloseable {
                         
queryContext.getSqlStatementContext().getSqlStatement(), 
SQLExecutorExceptionHandler.isExceptionThrown());
     }
     
-    @SuppressWarnings("rawtypes")
-    private ShardingSphereResultSet doExecuteQuery(final 
ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final 
QueryContext queryContext,
-                                                   final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine, 
final Statement statement,
-                                                   final Map<String, Integer> 
columnLabelAndIndexMap, final StatementReplayCallback statementReplayCallback) 
throws SQLException {
-        List<QueryResult> queryResults = executeQuery0(metaData, database, 
queryContext, prepareEngine, statementReplayCallback);
-        MergedResult mergedResult = mergeQuery(metaData, database, 
queryResults, queryContext.getSqlStatementContext());
-        boolean selectContainsEnhancedTable = 
queryContext.getSqlStatementContext() instanceof SelectStatementContext
-                && ((SelectStatementContext) 
queryContext.getSqlStatementContext()).isContainsEnhancedTable();
-        List<ResultSet> resultSets = getResultSets();
-        return new ShardingSphereResultSet(resultSets, mergedResult, 
statement, selectContainsEnhancedTable, queryContext.getSqlStatementContext(),
-                null == columnLabelAndIndexMap
-                        ? 
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(queryContext.getSqlStatementContext(),
 selectContainsEnhancedTable, resultSets.get(0).getMetaData())
-                        : columnLabelAndIndexMap);
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
-    private List<QueryResult> executeQuery0(final ShardingSphereMetaData 
metaData, final ShardingSphereDatabase database, final QueryContext 
queryContext,
-                                            final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
-                                            final StatementReplayCallback 
statementReplayCallback) throws SQLException {
+    private List<QueryResult> executePushDownQuery(final 
ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final 
QueryContext queryContext,
+                                                   final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
+                                                   final 
StatementReplayCallback statementReplayCallback) throws SQLException {
         ExecutionContext executionContext = createExecutionContext(metaData, 
database, queryContext);
         if (hasRawExecutionRule(database)) {
             return 
rawExecutor.execute(createRawExecutionGroupContext(metaData, database, 
executionContext),
@@ -191,6 +184,10 @@ public final class DriverExecutor implements AutoCloseable 
{
         return regularExecutor.executeQuery(executionGroupContext, 
queryContext, getExecuteQueryCallback(database, queryContext, 
prepareEngine.getType()));
     }
     
+    private boolean hasRawExecutionRule(final ShardingSphereDatabase database) 
{
+        return 
!database.getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty();
+    }
+    
     private Collection<Statement> getStatements(final 
ExecutionGroup<JDBCExecutionUnit> executionGroup) {
         Collection<Statement> result = new LinkedList<>();
         for (JDBCExecutionUnit each : executionGroup.getInputs()) {
@@ -221,10 +218,6 @@ public final class DriverExecutor implements AutoCloseable 
{
         statements.clear();
     }
     
-    private boolean hasRawExecutionRule(final ShardingSphereDatabase database) 
{
-        return 
!database.getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty();
-    }
-    
     private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext(final ShardingSphereMetaData metaData,
                                                                                
       final ShardingSphereDatabase database, final ExecutionContext 
executionContext) throws SQLException {
         int maxConnectionsSizePerQuery = 
metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
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 5f5d9d8443f..f029ee03fd1 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
@@ -223,7 +223,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
             ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
             findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
-            currentResultSet = 
executor.executeAdvanceQuery(metaDataContexts.getMetaData(), database, 
queryContext, createDriverExecutionPrepareEngine(database), this, 
columnLabelAndIndexMap,
+            currentResultSet = 
executor.executeQuery(metaDataContexts.getMetaData(), database, queryContext, 
createDriverExecutionPrepareEngine(database), this, columnLabelAndIndexMap,
                     (StatementReplayCallback<PreparedStatement>) this::replay);
             if (currentResultSet instanceof ShardingSphereResultSet) {
                 columnLabelAndIndexMap = ((ShardingSphereResultSet) 
currentResultSet).getColumnLabelAndIndexMap();
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 bda16fec1d4..1065c068557 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
@@ -151,7 +151,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
             ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
             sqlStatementContext = queryContext.getSqlStatementContext();
-            currentResultSet = 
executor.executeAdvanceQuery(metaDataContexts.getMetaData(), database, 
queryContext, createDriverExecutionPrepareEngine(database), this, null,
+            currentResultSet = 
executor.executeQuery(metaDataContexts.getMetaData(), database, queryContext, 
createDriverExecutionPrepareEngine(database), this, null,
                     (StatementReplayCallback<Statement>) (statements, 
parameterSets) -> replay(statements));
             statements.addAll(executor.getStatements());
             return currentResultSet;

Reply via email to