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

Reply via email to