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);
}