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 98f526e10a2 Refactor ShardingSpherePreparedStatement (#31545)
98f526e10a2 is described below

commit 98f526e10a210156c7b5330db0a6a852b7921760
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jun 3 13:08:22 2024 +0800

    Refactor ShardingSpherePreparedStatement (#31545)
---
 .../statement/ShardingSpherePreparedStatement.java | 39 ++++++++++------------
 1 file changed, 17 insertions(+), 22 deletions(-)

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 664dd06e989..aeb8ccbd569 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
@@ -340,21 +340,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         return result;
     }
     
-    private ExecutionContext createExecutionContext(final QueryContext 
queryContext) {
-        RuleMetaData globalRuleMetaData = metaData.getGlobalRuleMetaData();
-        ShardingSphereDatabase currentDatabase = 
metaData.getDatabase(databaseName);
-        SQLAuditEngine.audit(queryContext, globalRuleMetaData, 
currentDatabase);
-        ExecutionContext result = kernelProcessor.generateExecutionContext(
-                queryContext, currentDatabase, globalRuleMetaData, 
metaData.getProps(), 
connection.getDatabaseConnectionManager().getConnectionContext());
-        findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
-        return result;
-    }
-    
-    private ExecutionContext createExecutionContext(final QueryContext 
queryContext, final String trafficInstanceId) {
-        ExecutionUnit executionUnit = new ExecutionUnit(trafficInstanceId, new 
SQLUnit(queryContext.getSql(), queryContext.getParameters()));
-        return new ExecutionContext(queryContext, 
Collections.singletonList(executionUnit), new RouteContext());
-    }
-    
     private QueryContext createQueryContext() {
         List<Object> params = new ArrayList<>(getParameters());
         if (sqlStatementContext instanceof ParameterAware) {
@@ -422,8 +407,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         try {
             QueryContext queryContext = createQueryContext();
             Optional<String> trafficInstanceId = 
connection.getTrafficInstanceId(trafficRule, queryContext);
-            executionContext = trafficInstanceId
-                    .map(optional -> createExecutionContext(queryContext, 
optional)).orElseGet(() -> createExecutionContext(queryContext));
+            executionContext = trafficInstanceId.map(optional -> 
createExecutionContext(queryContext, optional)).orElseGet(() -> 
createExecutionContext(queryContext));
             
batchPreparedStatementExecutor.addBatchForExecutionUnits(executionContext.getExecutionUnits());
         } finally {
             currentResultSet = null;
@@ -431,6 +415,20 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         }
     }
     
+    private ExecutionContext createExecutionContext(final QueryContext 
queryContext, final String trafficInstanceId) {
+        return new ExecutionContext(queryContext, Collections.singleton(new 
ExecutionUnit(trafficInstanceId, new SQLUnit(queryContext.getSql(), 
queryContext.getParameters()))), new RouteContext());
+    }
+    
+    private ExecutionContext createExecutionContext(final QueryContext 
queryContext) {
+        RuleMetaData globalRuleMetaData = metaData.getGlobalRuleMetaData();
+        ShardingSphereDatabase currentDatabase = 
metaData.getDatabase(databaseName);
+        SQLAuditEngine.audit(queryContext, globalRuleMetaData, 
currentDatabase);
+        ExecutionContext result = kernelProcessor.generateExecutionContext(
+                queryContext, currentDatabase, globalRuleMetaData, 
metaData.getProps(), 
connection.getDatabaseConnectionManager().getConnectionContext());
+        findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
+        return result;
+    }
+    
     @Override
     public int[] executeBatch() throws SQLException {
         if (null == executionContext) {
@@ -464,16 +462,13 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
     }
     
     private void initBatchPreparedStatementExecutor(final 
BatchPreparedStatementExecutor batchExecutor) throws SQLException {
-        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
metaData.getProps()
-                
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), 
connection.getDatabaseConnectionManager(), statementManager, statementOption,
-                
metaData.getDatabase(databaseName).getRuleMetaData().getRules(),
-                
metaData.getDatabase(databaseName).getResourceMetaData().getStorageUnits());
         List<ExecutionUnit> executionUnits = new 
ArrayList<>(batchExecutor.getBatchExecutionUnits().size());
         for (BatchExecutionUnit each : batchExecutor.getBatchExecutionUnits()) 
{
             ExecutionUnit executionUnit = each.getExecutionUnit();
             executionUnits.add(executionUnit);
         }
-        
batchExecutor.init(prepareEngine.prepare(executionContext.getRouteContext(), 
executionUnits, new ExecutionGroupReportContext(connection.getProcessId(), 
databaseName, new Grantee("", ""))));
+        
batchExecutor.init(createDriverExecutionPrepareEngine(metaData.getDatabase(databaseName))
+                .prepare(executionContext.getRouteContext(), executionUnits, 
new ExecutionGroupReportContext(connection.getProcessId(), databaseName, new 
Grantee("", ""))));
         setBatchParametersForStatements(batchExecutor);
     }
     

Reply via email to