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 0596927315c Refactor ShardingSphereStatement (#31436)
0596927315c is described below
commit 0596927315caf38cf66326d7061abd1bf38e5dbe
Author: Liang Zhang <[email protected]>
AuthorDate: Wed May 29 16:13:03 2024 +0800
Refactor ShardingSphereStatement (#31436)
* Refactor ShardingSphereStatement
* Refactor ShardingSphereStatement
* Refactor ShardingSphereStatement
---
.../statement/ShardingSpherePreparedStatement.java | 31 +++++++-------
.../core/statement/ShardingSphereStatement.java | 49 ++++++++++------------
.../driver/jdbc/adapter/StatementAdapterTest.java | 9 ++--
.../proxy/backend/connector/DatabaseConnector.java | 19 ++++-----
4 files changed, 50 insertions(+), 58 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 d29bd3c6604..2326ca199fd 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
@@ -229,7 +229,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
currentResultSet = advancedResultSet.get();
return currentResultSet;
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
currentResultSet = doExecuteQuery(executionContext);
return currentResultSet;
// CHECKSTYLE:OFF
@@ -245,12 +245,12 @@ public final class ShardingSpherePreparedStatement
extends AbstractPreparedState
private ShardingSphereResultSet doExecuteQuery(final ExecutionContext
executionContext) throws SQLException {
List<QueryResult> queryResults = executeQuery0(executionContext);
- MergedResult mergedResult = mergeQuery(queryResults,
executionContext.getSqlStatementContext());
+ MergedResult mergedResult = mergeQuery(queryResults,
sqlStatementContext);
List<ResultSet> resultSets = getResultSets();
if (null == columnLabelAndIndexMap) {
columnLabelAndIndexMap =
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(sqlStatementContext,
selectContainsEnhancedTable, resultSets.get(0).getMetaData());
}
- return new ShardingSphereResultSet(resultSets, mergedResult, this,
selectContainsEnhancedTable, executionContext.getSqlStatementContext(),
columnLabelAndIndexMap);
+ return new ShardingSphereResultSet(resultSets, mergedResult, this,
selectContainsEnhancedTable, sqlStatementContext, columnLabelAndIndexMap);
}
private List<QueryResult> executeQuery0(final ExecutionContext
executionContext) throws SQLException {
@@ -303,7 +303,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
if (updatedCount.isPresent()) {
return updatedCount.get();
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
if (hasRawExecutionRule()) {
Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
executionContext.getQueryContext(), new RawSQLExecutorCallback());
@@ -368,7 +368,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
if (advancedResult.isPresent()) {
return advancedResult.get();
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
if (hasRawExecutionRule()) {
Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
executionContext.getQueryContext(), new RawSQLExecutorCallback());
@@ -386,13 +386,13 @@ public final class ShardingSpherePreparedStatement
extends AbstractPreparedState
}
private boolean executeWithExecutionContext(final ExecutionContext
executionContext) throws SQLException {
- return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
+ return isNeedImplicitCommitTransaction(connection,
sqlStatementContext.getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecute(executionContext);
}
private int executeUpdateWithExecutionContext(final ExecutionContext
executionContext) throws SQLException {
- return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
+ return isNeedImplicitCommitTransaction(connection,
sqlStatementContext.getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
? executeWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecuteUpdate(executionContext);
}
@@ -437,12 +437,11 @@ public final class ShardingSpherePreparedStatement
extends AbstractPreparedState
if (advancedResultSet.isPresent()) {
return advancedResultSet.get();
}
- if (executionContext.getSqlStatementContext() instanceof
SelectStatementContext ||
executionContext.getSqlStatementContext().getSqlStatement() instanceof
DALStatement) {
+ if (sqlStatementContext instanceof SelectStatementContext ||
sqlStatementContext.getSqlStatement() instanceof DALStatement) {
List<ResultSet> resultSets = getResultSets();
if (resultSets.isEmpty()) {
return currentResultSet;
}
- SQLStatementContext sqlStatementContext =
executionContext.getSqlStatementContext();
MergedResult mergedResult =
mergeQuery(getQueryResults(resultSets), sqlStatementContext);
if (null == columnLabelAndIndexMap) {
columnLabelAndIndexMap =
ShardingSphereResultSetUtils.createColumnLabelAndIndexMap(sqlStatementContext,
selectContainsEnhancedTable, resultSets.get(0).getMetaData());
@@ -478,7 +477,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
SQLAuditEngine.audit(queryContext.getSqlStatementContext(),
queryContext.getParameters(), globalRuleMetaData, currentDatabase, null,
queryContext.getHintValueContext());
ExecutionContext result = kernelProcessor.generateExecutionContext(
queryContext, currentDatabase, globalRuleMetaData,
metaDataContexts.getMetaData().getProps(),
connection.getDatabaseConnectionManager().getConnectionContext());
- findGeneratedKey(result).ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
+ findGeneratedKey().ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
return result;
}
@@ -537,10 +536,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
generatedValues.clear();
}
- private Optional<GeneratedKeyContext> findGeneratedKey(final
ExecutionContext executionContext) {
- return executionContext.getSqlStatementContext() instanceof
InsertStatementContext
- ? ((InsertStatementContext)
executionContext.getSqlStatementContext()).getGeneratedKeyContext()
- : Optional.empty();
+ private Optional<GeneratedKeyContext> findGeneratedKey() {
+ return sqlStatementContext instanceof InsertStatementContext ?
((InsertStatementContext) sqlStatementContext).getGeneratedKeyContext() :
Optional.empty();
}
@Override
@@ -548,7 +545,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
if (null != currentBatchGeneratedKeysResultSet) {
return currentBatchGeneratedKeysResultSet;
}
- Optional<GeneratedKeyContext> generatedKey =
findGeneratedKey(executionContext);
+ Optional<GeneratedKeyContext> generatedKey = findGeneratedKey();
if (generatedKey.isPresent() &&
statementOption.isReturnGeneratedKeys() && !generatedValues.isEmpty()) {
return new
GeneratedKeysResultSet(getGeneratedKeysColumnName(generatedKey.get().getColumnName()),
generatedValues.iterator(), this);
}
@@ -599,7 +596,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
private int[] doExecuteBatch(final BatchPreparedStatementExecutor
batchExecutor) throws SQLException {
initBatchPreparedStatementExecutor(batchExecutor);
- int[] result =
batchExecutor.executeBatch(executionContext.getSqlStatementContext());
+ int[] result = batchExecutor.executeBatch(sqlStatementContext);
if (statementOption.isReturnGeneratedKeys() &&
generatedValues.isEmpty()) {
List<Statement> batchPreparedStatementExecutorStatements =
batchExecutor.getStatements();
for (Statement statement :
batchPreparedStatementExecutorStatements) {
@@ -662,7 +659,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
@Override
public boolean isAccumulate() {
for (DataNodeRuleAttribute each :
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(DataNodeRuleAttribute.class))
{
- if
(each.isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()))
{
+ if
(each.isNeedAccumulate(sqlStatementContext.getTablesContext().getTableNames()))
{
return true;
}
}
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 97f2d415b90..af0cbc38445 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -116,9 +116,9 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private String databaseName;
- private boolean returnGeneratedKeys;
+ private SQLStatementContext sqlStatementContext;
- private ExecutionContext executionContext;
+ private boolean returnGeneratedKeys;
private ResultSet currentResultSet;
@@ -151,12 +151,13 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
+ sqlStatementContext = queryContext.getSqlStatementContext();
Optional<ResultSet> advancedResultSet =
executor.executeAdvanceQuery(metaDataContexts.getMetaData(), database,
queryContext, createDriverExecutionPrepareEngine(database));
if (advancedResultSet.isPresent()) {
currentResultSet = advancedResultSet.get();
return currentResultSet;
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
currentResultSet = doExecuteQuery(executionContext);
return currentResultSet;
// CHECKSTYLE:OFF
@@ -170,10 +171,9 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private ShardingSphereResultSet doExecuteQuery(final ExecutionContext
executionContext) throws SQLException {
List<QueryResult> queryResults = executeQuery0(executionContext);
- MergedResult mergedResult = mergeQuery(queryResults,
executionContext.getSqlStatementContext());
- boolean selectContainsEnhancedTable =
- executionContext.getSqlStatementContext() instanceof
SelectStatementContext && ((SelectStatementContext)
executionContext.getSqlStatementContext()).isContainsEnhancedTable();
- return new ShardingSphereResultSet(getResultSets(), mergedResult,
this, selectContainsEnhancedTable, executionContext.getSqlStatementContext());
+ MergedResult mergedResult = mergeQuery(queryResults,
sqlStatementContext);
+ boolean selectContainsEnhancedTable = sqlStatementContext instanceof
SelectStatementContext && ((SelectStatementContext)
sqlStatementContext).isContainsEnhancedTable();
+ return new ShardingSphereResultSet(getResultSets(), mergedResult,
this, selectContainsEnhancedTable, sqlStatementContext);
}
private List<QueryResult> executeQuery0(final ExecutionContext
executionContext) throws SQLException {
@@ -184,7 +184,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
cacheStatements(executionGroupContext.getInputGroups());
StatementExecuteQueryCallback callback = new
StatementExecuteQueryCallback(metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType(),
-
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
executionContext.getSqlStatementContext().getSqlStatement(),
+
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(),
sqlStatementContext.getSqlStatement(),
SQLExecutorExceptionHandler.isExceptionThrown());
return
executor.getRegularExecutor().executeQuery(executionGroupContext,
executionContext.getQueryContext(), callback);
}
@@ -262,7 +262,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private int executeUpdate(final ExecuteUpdateCallback updateCallback,
final SQLStatementContext sqlStatementContext, final ExecutionContext
executionContext) throws SQLException {
- return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
+ return isNeedImplicitCommitTransaction(connection,
sqlStatementContext.getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
? executeWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(updateCallback, sqlStatementContext,
executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecuteUpdate(updateCallback,
sqlStatementContext, executionContext);
@@ -274,25 +274,24 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
+ sqlStatementContext = queryContext.getSqlStatementContext();
Optional<Integer> updatedCount =
executor.executeAdvanceUpdate(metaDataContexts.getMetaData(), database,
queryContext, createDriverExecutionPrepareEngine(database), trafficCallback);
if (updatedCount.isPresent()) {
return updatedCount.get();
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
if
(!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
{
- Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
executionContext.getQueryContext(), new RawSQLExecutorCallback());
+ Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
queryContext, new RawSQLExecutorCallback());
return accumulate(results);
}
return executeUpdate(updateCallback,
queryContext.getSqlStatementContext(), executionContext);
}
- private int useDriverToExecuteUpdate(final ExecuteUpdateCallback
updateCallback, final SQLStatementContext sqlStatementContext,
- final ExecutionContext
executionContext) throws SQLException {
+ private int useDriverToExecuteUpdate(final ExecuteUpdateCallback
updateCallback, final SQLStatementContext sqlStatementContext, final
ExecutionContext executionContext) throws SQLException {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
cacheStatements(executionGroupContext.getInputGroups());
JDBCExecutorCallback<Integer> callback =
createExecuteUpdateCallback(updateCallback, sqlStatementContext);
- return
executor.getRegularExecutor().executeUpdate(executionGroupContext,
- executionContext.getQueryContext(),
executionContext.getRouteContext().getRouteUnits(), callback);
+ return
executor.getRegularExecutor().executeUpdate(executionGroupContext,
executionContext.getQueryContext(),
executionContext.getRouteContext().getRouteUnits(), callback);
}
private JDBCExecutorCallback<Integer> createExecuteUpdateCallback(final
ExecuteUpdateCallback updateCallback, final SQLStatementContext
sqlStatementContext) {
@@ -380,13 +379,14 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
databaseName =
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
ShardingSphereDatabase database =
metaDataContexts.getMetaData().getDatabase(databaseName);
+ sqlStatementContext = queryContext.getSqlStatementContext();
Optional<Boolean> advancedResult =
executor.executeAdvance(metaDataContexts.getMetaData(), database, queryContext,
createDriverExecutionPrepareEngine(database), trafficCallback);
if (advancedResult.isPresent()) {
return advancedResult.get();
}
- executionContext = createExecutionContext(queryContext);
+ ExecutionContext executionContext =
createExecutionContext(queryContext);
if
(!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
{
- Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
executionContext.getQueryContext(), new RawSQLExecutorCallback());
+ Collection<ExecuteResult> results =
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
queryContext, new RawSQLExecutorCallback());
return results.iterator().next() instanceof QueryResult;
}
return executeWithExecutionContext(executeCallback, executionContext);
@@ -452,7 +452,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private boolean executeWithExecutionContext(final ExecuteCallback
executeCallback, final ExecutionContext executionContext) throws SQLException {
- return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
+ return isNeedImplicitCommitTransaction(connection,
sqlStatementContext.getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executeCallback, executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecute(executeCallback, executionContext);
@@ -461,7 +461,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private boolean useDriverToExecute(final ExecuteCallback callback, final
ExecutionContext executionContext) throws SQLException {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
cacheStatements(executionGroupContext.getInputGroups());
- JDBCExecutorCallback<Boolean> jdbcExecutorCallback =
createExecuteCallback(callback,
executionContext.getSqlStatementContext().getSqlStatement());
+ JDBCExecutorCallback<Boolean> jdbcExecutorCallback =
createExecuteCallback(callback, sqlStatementContext.getSqlStatement());
return executor.getRegularExecutor().execute(executionGroupContext,
executionContext.getQueryContext(),
executionContext.getRouteContext().getRouteUnits(), jdbcExecutorCallback);
}
@@ -505,15 +505,14 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
if (advancedResultSet.isPresent()) {
return advancedResultSet.get();
}
- if (executionContext.getSqlStatementContext() instanceof
SelectStatementContext ||
executionContext.getSqlStatementContext().getSqlStatement() instanceof
DALStatement) {
+ if (sqlStatementContext instanceof SelectStatementContext ||
sqlStatementContext.getSqlStatement() instanceof DALStatement) {
List<ResultSet> resultSets = getResultSets();
if (resultSets.isEmpty()) {
return currentResultSet;
}
- 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,
executionContext.getSqlStatementContext());
+ currentResultSet = new ShardingSphereResultSet(resultSets,
mergedResult, this, selectContainsEnhancedTable, sqlStatementContext);
}
return currentResultSet;
}
@@ -564,7 +563,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
@Override
public boolean isAccumulate() {
for (DataNodeRuleAttribute each :
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(DataNodeRuleAttribute.class))
{
- if
(each.isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()))
{
+ if
(each.isNeedAccumulate(sqlStatementContext.getTablesContext().getTableNames()))
{
return true;
}
}
@@ -594,9 +593,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private Optional<GeneratedKeyContext> findGeneratedKey() {
- return executionContext.getSqlStatementContext() instanceof
InsertStatementContext
- ? ((InsertStatementContext)
executionContext.getSqlStatementContext()).getGeneratedKeyContext()
- : Optional.empty();
+ return sqlStatementContext instanceof InsertStatementContext ?
((InsertStatementContext) sqlStatementContext).getGeneratedKeyContext() :
Optional.empty();
}
private String getGeneratedKeysColumnName(final String columnName) {
diff --git
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
index 4cdb3fa62e5..08f83bb98b8 100644
---
a/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
+++
b/jdbc/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/StatementAdapterTest.java
@@ -20,10 +20,10 @@ package org.apache.shardingsphere.driver.jdbc.adapter;
import lombok.SneakyThrows;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement;
+import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -266,13 +266,12 @@ class StatementAdapterTest {
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
ConfigurationProperties(new Properties()));
ShardingSphereStatement result = new
ShardingSphereStatement(connection);
result.getRoutedStatements().addAll(Arrays.asList(statements));
- ExecutionContext executionContext = mock(ExecutionContext.class,
RETURNS_DEEP_STUBS);
- setExecutionContext(result, executionContext);
+ setExecutionContext(result);
return result;
}
@SneakyThrows(ReflectiveOperationException.class)
- private void setExecutionContext(final ShardingSphereStatement statement,
final ExecutionContext executionContext) {
-
Plugins.getMemberAccessor().set(statement.getClass().getDeclaredField("executionContext"),
statement, executionContext);
+ private void setExecutionContext(final ShardingSphereStatement statement) {
+
Plugins.getMemberAccessor().set(statement.getClass().getDeclaredField("sqlStatementContext"),
statement, mock(SQLStatementContext.class));
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index 32dc87430d7..eb5f97e7dbe 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -169,7 +169,7 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
return processExecuteFederation(resultSet, metaDataContexts);
}
ExecutionContext executionContext = generateExecutionContext();
- return
isNeedImplicitCommitTransaction(executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
+ return
isNeedImplicitCommitTransaction(queryContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
? doExecuteWithImplicitCommitTransaction(() ->
doExecute(executionContext))
: doExecute(executionContext);
}
@@ -216,14 +216,13 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
@SuppressWarnings({"unchecked", "rawtypes"})
private ResponseHeader doExecute(final ExecutionContext executionContext)
throws SQLException {
if (executionContext.getExecutionUnits().isEmpty()) {
- return new
UpdateResponseHeader(executionContext.getSqlStatementContext().getSqlStatement());
+ return new
UpdateResponseHeader(queryContext.getSqlStatementContext().getSqlStatement());
}
proxySQLExecutor.checkExecutePrerequisites(executionContext);
List result = proxySQLExecutor.execute(executionContext);
refreshMetaData(executionContext);
Object executeResultSample = result.iterator().next();
- return executeResultSample instanceof QueryResult ?
processExecuteQuery(queryContext.getSqlStatementContext(), result,
(QueryResult) executeResultSample)
- : processExecuteUpdate(executionContext, result);
+ return executeResultSample instanceof QueryResult ?
processExecuteQuery(queryContext.getSqlStatementContext(), result,
(QueryResult) executeResultSample) : processExecuteUpdate(result);
}
private ResultSet doExecuteFederation(final QueryContext queryContext,
final MetaDataContexts metaDataContexts) {
@@ -284,7 +283,7 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
private void refreshMetaData(final ExecutionContext executionContext)
throws SQLException {
ContextManager contextManager =
ProxyContext.getInstance().getContextManager();
new
MetaDataRefreshEngine(contextManager.getPersistServiceFacade().getMetaDataManagerPersistService(),
database,
-
contextManager.getMetaDataContexts().getMetaData().getProps()).refresh(executionContext.getSqlStatementContext(),
executionContext.getRouteContext().getRouteUnits());
+
contextManager.getMetaDataContexts().getMetaData().getProps()).refresh(queryContext.getSqlStatementContext(),
executionContext.getRouteContext().getRouteUnits());
}
private QueryResponseHeader processExecuteQuery(final SQLStatementContext
sqlStatementContext, final List<QueryResult> queryResults, final QueryResult
queryResultSample) throws SQLException {
@@ -326,14 +325,14 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
return mergeEngine.merge(queryResults, sqlStatementContext);
}
- private UpdateResponseHeader processExecuteUpdate(final ExecutionContext
executionContext, final Collection<UpdateResult> updateResults) {
- Optional<GeneratedKeyContext> generatedKeyContext =
executionContext.getSqlStatementContext() instanceof InsertStatementContext
- ? ((InsertStatementContext)
executionContext.getSqlStatementContext()).getGeneratedKeyContext()
+ private UpdateResponseHeader processExecuteUpdate(final
Collection<UpdateResult> updateResults) {
+ Optional<GeneratedKeyContext> generatedKeyContext =
queryContext.getSqlStatementContext() instanceof InsertStatementContext
+ ? ((InsertStatementContext)
queryContext.getSqlStatementContext()).getGeneratedKeyContext()
: Optional.empty();
Collection<Comparable<?>> autoIncrementGeneratedValues =
generatedKeyContext.filter(GeneratedKeyContext::isSupportAutoIncrement).map(GeneratedKeyContext::getGeneratedValues).orElseGet(Collections::emptyList);
- UpdateResponseHeader result = new
UpdateResponseHeader(executionContext.getSqlStatementContext().getSqlStatement(),
updateResults, autoIncrementGeneratedValues);
- mergeUpdateCount(executionContext.getSqlStatementContext(), result);
+ UpdateResponseHeader result = new
UpdateResponseHeader(queryContext.getSqlStatementContext().getSqlStatement(),
updateResults, autoIncrementGeneratedValues);
+ mergeUpdateCount(queryContext.getSqlStatementContext(), result);
return result;
}