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 ff176db8eaa Refactor ShowVersionExecutor (#19256)
ff176db8eaa is described below

commit ff176db8eaa7a91053bb5541d224dfd5773b1156
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 16 11:04:27 2022 +0800

    Refactor ShowVersionExecutor (#19256)
    
    * Refactor ShowVersionExecutorTest
    
    * Refactor StandaloneContextManagerBuilder
    
    * Refactor ClusterContextManagerBuilder
    
    * Fix checkstyle
    
    * Fix checkstyle
---
 .../cluster/ClusterContextManagerBuilder.java      |  3 +-
 .../StandaloneContextManagerBuilder.java           |  3 +-
 .../admin/mysql/executor/ShowVersionExecutor.java  | 11 +--
 .../mysql/executor/ShowVersionExecutorTest.java    | 99 +++++++++++-----------
 .../segment/dml/item/ProjectionsSegment.java       |  4 +-
 5 files changed, 59 insertions(+), 61 deletions(-)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 09b75b4482c..9f5ea29f7bf 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -88,9 +88,10 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         Collection<String> databaseNames = parameter.getInstanceMetaData() 
instanceof JDBCInstanceMetaData
                 ? parameter.getDatabaseConfigs().keySet()
                 : 
persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
+        Map<String, DatabaseConfiguration> databaseConfigMap = 
buildDatabaseConfigMap(databaseNames, persistService, parameter);
         Collection<RuleConfiguration> globalRuleConfigs = 
persistService.getGlobalRuleService().load();
         ConfigurationProperties props = new 
ConfigurationProperties(persistService.getPropsService().load());
-        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(buildDatabaseConfigMap(databaseNames, 
persistService, parameter), props, instanceContext);
+        Map<String, ShardingSphereDatabase> databases = 
ShardingSphereDatabasesFactory.create(databaseConfigMap, props, 
instanceContext);
         ShardingSphereRuleMetaData globalMetaData = new 
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, 
databases, instanceContext));
         return new MetaDataContexts(persistService, new 
ShardingSphereMetaData(databases, globalMetaData, props), 
OptimizerContextFactory.create(databases, globalMetaData));
     }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index 59456008f9e..cdb24bec67c 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -60,7 +60,8 @@ public final class StandaloneContextManagerBuilder implements 
ContextManagerBuil
         MetaDataPersistService persistService = new 
MetaDataPersistService(repository);
         persistConfigurations(persistService, parameter);
         InstanceContext instanceContext = buildInstanceContext(parameter);
-        return new ContextManager(buildMetaDataContexts(persistService, 
parameter, instanceContext), instanceContext);
+        MetaDataContexts metaDataContexts = 
buildMetaDataContexts(persistService, parameter, instanceContext);
+        return new ContextManager(metaDataContexts, instanceContext);
     }
     
     private void persistConfigurations(final MetaDataPersistService 
persistService, final ContextManagerBuilderParameter parameter) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutor.java
index 963bb580a21..8633bb35428 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutor.java
@@ -29,11 +29,9 @@ import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryRes
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 
 import java.sql.Types;
-import java.util.Collection;
 import java.util.Collections;
 
 /**
@@ -60,12 +58,7 @@ public final class ShowVersionExecutor implements 
DatabaseAdminQueryExecutor {
     }
     
     private String getLabel() {
-        Collection<ProjectionSegment> projections = 
sqlStatement.getProjections().getProjections();
-        for (ProjectionSegment each : projections) {
-            if (each instanceof ExpressionProjectionSegment) {
-                return ((ExpressionProjectionSegment) 
each).getAlias().orElse(FUNCTION_NAME);
-            }
-        }
-        return FUNCTION_NAME;
+        return sqlStatement.getProjections().getProjections().stream()
+                .filter(each -> each instanceof 
ExpressionProjectionSegment).findFirst().map(each -> 
((ExpressionProjectionSegment) 
each).getAlias().orElse(FUNCTION_NAME)).orElse(FUNCTION_NAME);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutorTest.java
index 530b6656938..4cd2a33abb6 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowVersionExecutorTest.java
@@ -21,79 +21,82 @@ import 
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLServerInfo;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
 
 import java.sql.SQLException;
-import java.util.Collection;
-import java.util.LinkedList;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(MockitoJUnitRunner.class)
 public final class ShowVersionExecutorTest {
     
+    private String previousVersion;
+    
+    @Before
+    public void setUp() {
+        previousVersion = MySQLServerInfo.getServerVersion("foo_db");
+        MySQLServerInfo.setServerVersion("foo_db", "8.0.26");
+    }
+    
+    @After
+    public void tearDown() {
+        MySQLServerInfo.setServerVersion("foo_db", previousVersion);
+    }
+    
     @Test
     public void assertExecute() throws SQLException {
-        String databaseName = "test";
-        MySQLServerInfo.setServerVersion(databaseName, "8.0.26");
-        ShowVersionExecutor executor = new 
ShowVersionExecutor(mockSelectStatement());
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
-        when(connectionSession.getDatabaseName()).thenReturn(databaseName);
-        executor.execute(connectionSession);
-        QueryResultMetaData metaData = executor.getQueryResultMetaData();
-        assertThat(metaData.getColumnCount(), is(1));
-        assertThat(metaData.getColumnName(1), 
is(ShowVersionExecutor.FUNCTION_NAME));
-        assertThat(metaData.getColumnLabel(1), 
is(ShowVersionExecutor.FUNCTION_NAME));
-        while (executor.getMergedResult().next()) {
-            assertThat(executor.getMergedResult().getValue(1, Object.class), 
is(MySQLServerInfo.getServerVersion(databaseName)));
-        }
+        SelectStatement selectStatement = mock(SelectStatement.class);
+        
when(selectStatement.getProjections()).thenReturn(createProjectionsSegmentWithoutAlias());
+        ShowVersionExecutor executor = new 
ShowVersionExecutor(selectStatement);
+        executor.execute(mockConnectionSession());
+        assertQueryResult(executor, ShowVersionExecutor.FUNCTION_NAME);
+    }
+    
+    private ProjectionsSegment createProjectionsSegmentWithoutAlias() {
+        ExpressionProjectionSegment expressionProjectionSegment = new 
ExpressionProjectionSegment(0, 0, "version()");
+        ProjectionsSegment result = new ProjectionsSegment(0, 0);
+        result.getProjections().add(expressionProjectionSegment);
+        return result;
+    }
+    
+    private ConnectionSession mockConnectionSession() {
+        ConnectionSession result = mock(ConnectionSession.class);
+        when(result.getDatabaseName()).thenReturn("foo_db");
+        return result;
     }
     
     @Test
     public void assertExecuteWithAlias() throws SQLException {
-        String databaseName = "test";
-        MySQLServerInfo.setServerVersion(databaseName, "8.0.26");
-        ShowVersionExecutor executor = new 
ShowVersionExecutor(mockSelectStatementWithAlias());
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
-        when(connectionSession.getDatabaseName()).thenReturn(databaseName);
-        executor.execute(connectionSession);
-        QueryResultMetaData metaData = executor.getQueryResultMetaData();
-        assertThat(metaData.getColumnCount(), is(1));
-        assertThat(metaData.getColumnName(1), 
is(ShowVersionExecutor.FUNCTION_NAME));
-        assertThat(metaData.getColumnLabel(1), is("test_alias"));
-        while (executor.getMergedResult().next()) {
-            assertThat(executor.getMergedResult().getValue(1, Object.class), 
is(MySQLServerInfo.getServerVersion(databaseName)));
-        }
+        SelectStatement selectStatement = mock(SelectStatement.class);
+        
when(selectStatement.getProjections()).thenReturn(createProjectionsSegmentWithAlias());
+        ShowVersionExecutor executor = new 
ShowVersionExecutor(selectStatement);
+        executor.execute(mockConnectionSession());
+        assertQueryResult(executor, "foo_alias");
     }
     
-    private SelectStatement mockSelectStatement() {
-        Collection<ProjectionSegment> projections = new LinkedList<>();
-        ProjectionsSegment segment = mock(ProjectionsSegment.class);
-        when(segment.getProjections()).thenReturn(projections);
-        SelectStatement result = mock(SelectStatement.class);
-        when(result.getProjections()).thenReturn(segment);
+    private ProjectionsSegment createProjectionsSegmentWithAlias() {
+        ExpressionProjectionSegment expressionProjectionSegment = new 
ExpressionProjectionSegment(0, 0, "version()");
+        expressionProjectionSegment.setAlias(new AliasSegment(0, 0, new 
IdentifierValue("foo_alias")));
+        ProjectionsSegment result = new ProjectionsSegment(0, 0);
+        result.getProjections().add(expressionProjectionSegment);
         return result;
     }
     
-    private SelectStatement mockSelectStatementWithAlias() {
-        Collection<ProjectionSegment> projections = new LinkedList<>();
-        ExpressionProjectionSegment projectionSegment = new 
ExpressionProjectionSegment(0, 0, "version()");
-        projectionSegment.setAlias(new AliasSegment(0, 0, new 
IdentifierValue("test_alias")));
-        projections.add(projectionSegment);
-        ProjectionsSegment segment = mock(ProjectionsSegment.class);
-        when(segment.getProjections()).thenReturn(projections);
-        SelectStatement result = mock(SelectStatement.class);
-        when(result.getProjections()).thenReturn(segment);
-        return result;
+    private void assertQueryResult(final ShowVersionExecutor executor, final 
String expectedColumnLabel) throws SQLException {
+        QueryResultMetaData actualQueryResultMetaData = 
executor.getQueryResultMetaData();
+        assertThat(actualQueryResultMetaData.getColumnCount(), is(1));
+        assertThat(actualQueryResultMetaData.getColumnName(1), 
is(ShowVersionExecutor.FUNCTION_NAME));
+        assertThat(actualQueryResultMetaData.getColumnLabel(1), 
is(expectedColumnLabel));
+        while (executor.getMergedResult().next()) {
+            assertThat(executor.getMergedResult().getValue(1, Object.class), 
is(MySQLServerInfo.getServerVersion("foo_db")));
+        }
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ProjectionsSegment.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ProjectionsSegment.java
index f9a4e54e1ec..872ca9f216b 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ProjectionsSegment.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ProjectionsSegment.java
@@ -38,8 +38,8 @@ public final class ProjectionsSegment implements SQLSegment {
     
     private final int stopIndex;
     
+    private final Collection<ProjectionSegment> projections = new 
LinkedList<>();
+    
     @Setter
     private boolean distinctRow;
-    
-    private final Collection<ProjectionSegment> projections = new 
LinkedList<>();
 }

Reply via email to