This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 5f57f082745 Optimize ShardingSpherePreparedStatement and 
ShardingSphereStatement for multi execution (#28927)
5f57f082745 is described below

commit 5f57f082745c7f94e702d4f05caa80adc121fcc6
Author: Chuxin Chen <[email protected]>
AuthorDate: Fri Nov 3 15:23:47 2023 +0800

    Optimize ShardingSpherePreparedStatement and ShardingSphereStatement for 
multi execution (#28927)
    
    * Optimize ShardingSpherePreparedStatement and ShardingSphereStatement for 
support multi executionContext.
    
    * Optimize ShardingSpherePreparedStatement and ShardingSphereStatement for 
support multi executionContext.
---
 .../statement/ShardingSpherePreparedStatement.java | 33 ++++++++++++++--------
 .../core/statement/ShardingSphereStatement.java    | 22 +++++++++------
 2 files changed, 35 insertions(+), 20 deletions(-)

diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 1fefc7e0380..76e90de5383 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -369,7 +369,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
                 }
                 return accumulate(results);
             }
-            return isNeedImplicitCommitTransaction(connection, 
executionContexts) ? executeUpdateWithImplicitCommitTransaction() : 
useDriverToExecuteUpdate();
+            return executeUpdateWithExecutionContexts(executionContexts);
             // CHECKSTYLE:OFF
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
@@ -380,7 +380,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         }
     }
     
-    private int useDriverToExecuteUpdate() throws SQLException {
+    private int useDriverToExecuteUpdate(final Collection<ExecutionContext> 
executionContexts) throws SQLException {
         Integer result = null;
         Preconditions.checkArgument(!executionContexts.isEmpty());
         // TODO support multi execution context, currently 
executionContexts.size() always equals 1
@@ -448,7 +448,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
                 }
                 return results.iterator().next() instanceof QueryResult;
             }
-            return isNeedImplicitCommitTransaction(connection, 
executionContexts) ? executeWithImplicitCommitTransaction() : 
useDriverToExecute();
+            return executeWithExecutionContexts(executionContexts);
             // CHECKSTYLE:OFF
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
@@ -474,11 +474,15 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
                 .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(databaseName));
     }
     
-    private boolean executeWithImplicitCommitTransaction() throws SQLException 
{
+    private boolean executeWithExecutionContexts(final 
Collection<ExecutionContext> executionContexts) throws SQLException {
+        return isNeedImplicitCommitTransaction(connection, executionContexts) 
? executeWithImplicitCommitTransaction(executionContexts) : 
useDriverToExecute(executionContexts);
+    }
+    
+    private boolean executeWithImplicitCommitTransaction(final 
Collection<ExecutionContext> executionContexts) throws SQLException {
         boolean result;
         try {
             connection.setAutoCommit(false);
-            result = useDriverToExecute();
+            result = useDriverToExecute(executionContexts);
             connection.commit();
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
@@ -491,11 +495,15 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
         return result;
     }
     
-    private int executeUpdateWithImplicitCommitTransaction() throws 
SQLException {
+    private int executeUpdateWithExecutionContexts(final 
Collection<ExecutionContext> executionContexts) throws SQLException {
+        return isNeedImplicitCommitTransaction(connection, executionContexts) 
? executeUpdateWithImplicitCommitTransaction(executionContexts) : 
useDriverToExecuteUpdate(executionContexts);
+    }
+    
+    private int executeUpdateWithImplicitCommitTransaction(final 
Collection<ExecutionContext> executionContexts) throws SQLException {
         int result;
         try {
             connection.setAutoCommit(false);
-            result = useDriverToExecuteUpdate();
+            result = useDriverToExecuteUpdate(executionContexts);
             connection.commit();
             // CHECKSTYLE:OFF
         } catch (final RuntimeException ex) {
@@ -508,7 +516,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         return result;
     }
     
-    private boolean useDriverToExecute() throws SQLException {
+    private boolean useDriverToExecute(final Collection<ExecutionContext> 
executionContexts) throws SQLException {
         Boolean result = null;
         Preconditions.checkArgument(!executionContexts.isEmpty());
         // TODO support multi execution context, currently 
executionContexts.size() always equals 1
@@ -554,18 +562,19 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
         if (useFederation) {
             return executor.getSqlFederationEngine().getResultSet();
         }
-        if (executionContexts.iterator().next().getSqlStatementContext() 
instanceof SelectStatementContext
-                || 
executionContexts.iterator().next().getSqlStatementContext().getSqlStatement() 
instanceof DALStatement) {
+        ExecutionContext executionContext = 
executionContexts.iterator().next();
+        if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext
+                || executionContext.getSqlStatementContext().getSqlStatement() 
instanceof DALStatement) {
             List<ResultSet> resultSets = getResultSets();
             if (resultSets.isEmpty()) {
                 return currentResultSet;
             }
-            SQLStatementContext sqlStatementContext = 
executionContexts.iterator().next().getSqlStatementContext();
+            SQLStatementContext sqlStatementContext = 
executionContext.getSqlStatementContext();
             MergedResult mergedResult = 
mergeQuery(getQueryResults(resultSets), sqlStatementContext);
             if (null == columnLabelAndIndexMap) {
                 columnLabelAndIndexMap = 
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(sqlStatementContext, 
selectContainsEnhancedTable, resultSets.get(0).getMetaData());
             }
-            currentResultSet = new ShardingSphereResultSet(resultSets, 
mergedResult, this, selectContainsEnhancedTable, 
executionContexts.iterator().next(), columnLabelAndIndexMap);
+            currentResultSet = new ShardingSphereResultSet(resultSets, 
mergedResult, this, selectContainsEnhancedTable, executionContext, 
columnLabelAndIndexMap);
         }
         return currentResultSet;
     }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index d675040734b..d0774578610 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -477,8 +477,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                 }
                 return results.iterator().next() instanceof QueryResult;
             }
-            return isNeedImplicitCommitTransaction(connection, 
executionContexts) ? executeWithImplicitCommitTransaction(executeCallback, 
executionContexts)
-                    : useDriverToExecute(executeCallback, executionContexts);
+            return executeWithExecutionContexts(executeCallback, 
executionContexts);
         } finally {
             currentResultSet = null;
         }
@@ -554,6 +553,11 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                 .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(databaseName));
     }
     
+    private boolean executeWithExecutionContexts(final ExecuteCallback 
executeCallback, final Collection<ExecutionContext> executionContexts) throws 
SQLException {
+        return isNeedImplicitCommitTransaction(connection, executionContexts) 
? executeWithImplicitCommitTransaction(executeCallback, executionContexts)
+                : useDriverToExecute(executeCallback, executionContexts);
+    }
+    
     private boolean executeWithImplicitCommitTransaction(final ExecuteCallback 
callback, final Collection<ExecutionContext> executionContexts) throws 
SQLException {
         boolean result;
         try {
@@ -626,16 +630,17 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         if (useFederation) {
             return executor.getSqlFederationEngine().getResultSet();
         }
-        if (executionContexts.iterator().next().getSqlStatementContext() 
instanceof SelectStatementContext
-                || 
executionContexts.iterator().next().getSqlStatementContext().getSqlStatement() 
instanceof DALStatement) {
+        ExecutionContext executionContext = 
executionContexts.iterator().next();
+        if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext
+                || executionContext.getSqlStatementContext().getSqlStatement() 
instanceof DALStatement) {
             List<ResultSet> resultSets = getResultSets();
             if (resultSets.isEmpty()) {
                 return currentResultSet;
             }
-            SQLStatementContext sqlStatementContext = 
executionContexts.iterator().next().getSqlStatementContext();
+            SQLStatementContext sqlStatementContext = 
executionContext.getSqlStatementContext();
             MergedResult mergedResult = 
mergeQuery(getQueryResults(resultSets), sqlStatementContext);
             boolean selectContainsEnhancedTable = sqlStatementContext 
instanceof SelectStatementContext && ((SelectStatementContext) 
sqlStatementContext).isContainsEnhancedTable();
-            currentResultSet = new ShardingSphereResultSet(resultSets, 
mergedResult, this, selectContainsEnhancedTable, 
executionContexts.iterator().next());
+            currentResultSet = new ShardingSphereResultSet(resultSets, 
mergedResult, this, selectContainsEnhancedTable, executionContext);
         }
         return currentResultSet;
     }
@@ -712,8 +717,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     }
     
     private Optional<GeneratedKeyContext> findGeneratedKey() {
-        return executionContexts.iterator().next().getSqlStatementContext() 
instanceof InsertStatementContext
-                ? ((InsertStatementContext) 
executionContexts.iterator().next().getSqlStatementContext()).getGeneratedKeyContext()
+        ExecutionContext executionContext = 
executionContexts.iterator().next();
+        return executionContext.getSqlStatementContext() instanceof 
InsertStatementContext
+                ? ((InsertStatementContext) 
executionContext.getSqlStatementContext()).getGeneratedKeyContext()
                 : Optional.empty();
     }
     

Reply via email to