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 ac06be29ea0 Refactor DistSQLQueryExecuteEngine (#30018)
ac06be29ea0 is described below

commit ac06be29ea03c3c6d89a76dbea7392fe16c8d51f
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Feb 6 18:52:51 2024 +0800

    Refactor DistSQLQueryExecuteEngine (#30018)
    
    * Refactor DistSQLQueryExecuteEngine
    
    * Refactor DistSQLQueryExecuteEngine
---
 .../type/query/DistSQLQueryExecuteEngine.java      | 12 +++++++-----
 .../distsql/DistSQLQueryBackendHandler.java        | 22 +++++++++-------------
 .../ral/QueryableRALBackendHandlerTest.java        |  4 ++--
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/query/DistSQLQueryExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/query/DistSQLQueryExecuteEngine.java
index a58eb49939e..48a2400661d 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/query/DistSQLQueryExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/query/DistSQLQueryExecuteEngine.java
@@ -34,12 +34,14 @@ import java.util.Collections;
 /**
  * DistSQL query execute engine.
  */
-public abstract class DistSQLQueryExecuteEngine {
+public final class DistSQLQueryExecuteEngine {
     
     private final DistSQLStatement sqlStatement;
     
     private final ContextManager contextManager;
     
+    private final DistSQLConnectionContext distsqlConnectionContext;
+    
     private final String databaseName;
     
     @Getter
@@ -48,9 +50,11 @@ public abstract class DistSQLQueryExecuteEngine {
     @Getter
     private Collection<LocalDataQueryResultRow> rows;
     
-    public DistSQLQueryExecuteEngine(final DistSQLStatement sqlStatement, 
final String currentDatabaseName, final ContextManager contextManager) {
+    public DistSQLQueryExecuteEngine(final DistSQLStatement sqlStatement, 
final String currentDatabaseName,
+                                     final ContextManager contextManager, 
final DistSQLConnectionContext distsqlConnectionContext) {
         this.sqlStatement = sqlStatement;
         this.contextManager = contextManager;
+        this.distsqlConnectionContext = distsqlConnectionContext;
         databaseName = DatabaseNameUtils.getDatabaseName(sqlStatement, 
currentDatabaseName);
     }
     
@@ -64,13 +68,11 @@ public abstract class DistSQLQueryExecuteEngine {
         DistSQLQueryExecutor<DistSQLStatement> executor = 
TypedSPILoader.getService(DistSQLQueryExecutor.class, sqlStatement.getClass());
         columnNames = executor.getColumnNames();
         try {
-            new DistSQLExecutorAwareSetter(executor).set(contextManager, null 
== databaseName ? null : contextManager.getDatabase(databaseName), 
getDistSQLConnectionContext());
+            new DistSQLExecutorAwareSetter(executor).set(contextManager, null 
== databaseName ? null : contextManager.getDatabase(databaseName), 
distsqlConnectionContext);
         } catch (final UnsupportedSQLOperationException ignored) {
             rows = Collections.emptyList();
             return;
         }
         rows = executor.getRows(sqlStatement, contextManager);
     }
-    
-    protected abstract DistSQLConnectionContext getDistSQLConnectionContext();
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandler.java
index e24693376be..3d045f4d3ea 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandler.java
@@ -40,24 +40,26 @@ import java.util.stream.Collectors;
 /**
  * DistSQL query backend handler.
  */
-public final class DistSQLQueryBackendHandler extends 
DistSQLQueryExecuteEngine implements DistSQLBackendHandler {
+public final class DistSQLQueryBackendHandler implements DistSQLBackendHandler 
{
     
-    private final ConnectionSession connectionSession;
+    private final DistSQLQueryExecuteEngine engine;
     
     private List<QueryHeader> queryHeaders;
     
     private MergedResult mergedResult;
     
     public DistSQLQueryBackendHandler(final DistSQLStatement sqlStatement, 
final ConnectionSession connectionSession) {
-        super(sqlStatement, connectionSession.getDatabaseName(), 
ProxyContext.getInstance().getContextManager());
-        this.connectionSession = connectionSession;
+        DistSQLConnectionContext distsqlConnectionContext = new 
DistSQLConnectionContext(connectionSession.getConnectionContext(),
+                
connectionSession.getDatabaseConnectionManager().getConnectionSize(), 
connectionSession.getProtocolType(),
+                connectionSession.getDatabaseConnectionManager(), 
connectionSession.getStatementManager());
+        engine = new DistSQLQueryExecuteEngine(sqlStatement, 
connectionSession.getDatabaseName(), 
ProxyContext.getInstance().getContextManager(), distsqlConnectionContext);
     }
     
     @Override
     public ResponseHeader execute() throws SQLException {
-        executeQuery();
-        queryHeaders = createQueryHeader(getColumnNames());
-        mergedResult = new LocalDataMergedResult(getRows());
+        engine.executeQuery();
+        queryHeaders = createQueryHeader(engine.getColumnNames());
+        mergedResult = new LocalDataMergedResult(engine.getRows());
         return new QueryResponseHeader(queryHeaders);
     }
     
@@ -78,10 +80,4 @@ public final class DistSQLQueryBackendHandler extends 
DistSQLQueryExecuteEngine
         }
         return new QueryResponseRow(cells);
     }
-    
-    @Override
-    protected DistSQLConnectionContext getDistSQLConnectionContext() {
-        return new 
DistSQLConnectionContext(connectionSession.getConnectionContext(), 
connectionSession.getDatabaseConnectionManager().getConnectionSize(),
-                connectionSession.getProtocolType(), 
connectionSession.getDatabaseConnectionManager(), 
connectionSession.getStatementManager());
-    }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
index ce584598220..1024d18affb 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
@@ -70,7 +70,7 @@ class QueryableRALBackendHandlerTest {
     void assertExecuteWithUnknownDatabase() {
         ShardingSphereMetaData metaData = new ShardingSphereMetaData();
         MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class), metaData);
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
+        ConnectionSession connectionSession = mock(ConnectionSession.class, 
RETURNS_DEEP_STUBS);
         when(connectionSession.getDatabaseName()).thenReturn("unknown");
         ContextManager contextManager = new ContextManager(metaDataContexts, 
mock(InstanceContext.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
@@ -79,7 +79,7 @@ class QueryableRALBackendHandlerTest {
     
     @Test
     void assertExecuteWithAbstractStatement() {
-        assertThrows(ServiceProviderNotFoundException.class, () -> new 
DistSQLQueryBackendHandler(mock(QueryableRALStatement.class), 
mock(ConnectionSession.class)).execute());
+        assertThrows(ServiceProviderNotFoundException.class, () -> new 
DistSQLQueryBackendHandler(mock(QueryableRALStatement.class), 
mock(ConnectionSession.class, RETURNS_DEEP_STUBS)).execute());
     }
     
     @Test

Reply via email to