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