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