You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2024/06/03 05:08:28 UTC

(shardingsphere) branch master updated: Refactor ShardingSpherePreparedStatement (#31545)

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 <zh...@apache.org>
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);
     }