You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2022/06/11 04:31:55 UTC

[shardingsphere] branch master updated: Merge SingleLocalDataMergedResult and MultipleLocalDataMergedResult to LocalDataMergedResult (#18299)

This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 e70e8c993b0 Merge SingleLocalDataMergedResult and MultipleLocalDataMergedResult to LocalDataMergedResult (#18299)
e70e8c993b0 is described below

commit e70e8c993b0b059653025a00038356551be8d8f8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Jun 11 12:31:48 2022 +0800

    Merge SingleLocalDataMergedResult and MultipleLocalDataMergedResult to LocalDataMergedResult (#18299)
---
 .../merge/dal/ShardingDALResultMerger.java         |  4 +-
 ...ergedResult.java => LocalDataMergedResult.java} |  6 +-
 .../dal/common/SingleLocalDataMergedResult.java    | 70 ----------------------
 .../merge/dal/ShardingDALResultMergerTest.java     |  4 +-
 ...ultTest.java => LocalDataMergedResultTest.java} | 12 ++--
 .../common/SingleLocalDataMergedResultTest.java    | 68 ---------------------
 .../mysql/executor/ShowConnectionIdExecutor.java   |  4 +-
 .../executor/ShowCurrentDatabaseExecutor.java      |  4 +-
 .../mysql/executor/ShowCurrentUserExecutor.java    |  4 +-
 .../mysql/executor/ShowDatabasesExecutor.java      | 11 ++--
 .../mysql/executor/ShowTransactionExecutor.java    |  4 +-
 .../admin/mysql/executor/ShowVersionExecutor.java  |  4 +-
 .../distsql/ral/QueryableRALBackendHandler.java    |  4 +-
 .../ShowReadwriteSplittingHintStatusExecutor.java  |  4 +-
 .../executor/ShowShardingHintStatusExecutor.java   |  4 +-
 .../DatabaseAdminQueryBackendHandlerTest.java      | 29 ++++-----
 16 files changed, 46 insertions(+), 190 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
index 80b2207b52b..2c0186a1554 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereSchema;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.LogicTablesMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.ShowCreateTableMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.ShowIndexMergedResult;
@@ -58,7 +58,7 @@ public final class ShardingDALResultMerger implements ResultMerger {
         SQLStatement dalStatement = sqlStatementContext.getSqlStatement();
         String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElse(DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), database.getName()));
         if (dalStatement instanceof MySQLShowDatabasesStatement) {
-            return new SingleLocalDataMergedResult(Collections.singletonList(databaseName));
+            return new LocalDataMergedResult(Collections.singleton(Collections.singletonList(databaseName)));
         }
         ShardingSphereSchema schema = database.getSchemas().get(schemaName);
         if (dalStatement instanceof MySQLShowTablesStatement) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResult.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResult.java
similarity index 91%
rename from shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResult.java
rename to shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResult.java
index 7c558104cca..626a27818ff 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResult.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResult.java
@@ -28,15 +28,15 @@ import java.util.Iterator;
 import java.util.List;
 
 /**
- * Merged result for multiple local data.
+ * Local data merged result.
  */
-public final class MultipleLocalDataMergedResult implements MergedResult {
+public final class LocalDataMergedResult implements MergedResult {
     
     private final Iterator<List<Object>> rows;
     
     private List<Object> currentRow;
     
-    public MultipleLocalDataMergedResult(final Collection<List<Object>> rows) {
+    public LocalDataMergedResult(final Collection<List<Object>> rows) {
         this.rows = rows.iterator();
     }
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResult.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResult.java
deleted file mode 100644
index a1010984865..00000000000
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResult.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sharding.merge.dal.common;
-
-import org.apache.shardingsphere.infra.merge.result.MergedResult;
-
-import java.io.InputStream;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * Merged result for single local data.
- */
-public final class SingleLocalDataMergedResult implements MergedResult {
-    
-    private final Iterator<Object> values;
-    
-    private Object currentValue;
-    
-    public SingleLocalDataMergedResult(final Collection<Object> values) {
-        this.values = values.iterator();
-    }
-    
-    @Override
-    public boolean next() {
-        if (values.hasNext()) {
-            currentValue = values.next();
-            return true;
-        }
-        return false;
-    }
-    
-    @Override
-    public Object getValue(final int columnIndex, final Class<?> type) {
-        return currentValue;
-    }
-    
-    @Override
-    public Object getCalendarValue(final int columnIndex, final Class<?> type, final Calendar calendar) {
-        return currentValue;
-    }
-    
-    @Override
-    public InputStream getInputStream(final int columnIndex, final String type) throws SQLException {
-        throw new SQLFeatureNotSupportedException("getInputStream");
-    }
-    
-    @Override
-    public boolean wasNull() {
-        return null == currentValue;
-    }
-}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
index 50a8bc2c36e..46c66a46f8e 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMergerTest.java
@@ -24,7 +24,7 @@ import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.LogicTablesMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.ShowCreateTableMergedResult;
 import org.apache.shardingsphere.sharding.merge.dal.show.ShowIndexMergedResult;
@@ -68,7 +68,7 @@ public final class ShardingDALResultMergerTest {
         ShardingDALResultMerger resultMerger = new ShardingDALResultMerger(DefaultDatabase.LOGIC_NAME, null);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        assertThat(resultMerger.merge(queryResults, sqlStatementContext, database), instanceOf(SingleLocalDataMergedResult.class));
+        assertThat(resultMerger.merge(queryResults, sqlStatementContext, database), instanceOf(LocalDataMergedResult.class));
     }
     
     @Test
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResultTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResultTest.java
similarity index 79%
rename from shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResultTest.java
rename to shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResultTest.java
index 0c7dd75846d..a0c99db2c58 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/MultipleLocalDataMergedResultTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/LocalDataMergedResultTest.java
@@ -31,12 +31,12 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
-public final class MultipleLocalDataMergedResultTest {
+public final class LocalDataMergedResultTest {
     
     @Test
     public void assertNext() {
         List<Object> row = Collections.singletonList("value");
-        MultipleLocalDataMergedResult actual = new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(row));
         assertTrue(actual.next());
         assertFalse(actual.next());
     }
@@ -44,7 +44,7 @@ public final class MultipleLocalDataMergedResultTest {
     @Test
     public void assertGetValue() {
         List<Object> row = Collections.singletonList("value");
-        MultipleLocalDataMergedResult actual = new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(row));
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Object.class).toString(), is("value"));
     }
@@ -52,7 +52,7 @@ public final class MultipleLocalDataMergedResultTest {
     @Test
     public void assertGetCalendarValue() {
         List<Object> row = Collections.singletonList(new Date(0L));
-        MultipleLocalDataMergedResult actual = new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(row));
         assertTrue(actual.next());
         assertThat(actual.getCalendarValue(1, Object.class, Calendar.getInstance()), is(new Date(0L)));
     }
@@ -60,14 +60,14 @@ public final class MultipleLocalDataMergedResultTest {
     @Test(expected = SQLFeatureNotSupportedException.class)
     public void assertGetInputStream() throws SQLException {
         List<Object> row = Collections.singletonList("value");
-        MultipleLocalDataMergedResult actual = new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(row));
         actual.getInputStream(1, "Ascii");
     }
     
     @Test
     public void assertWasNull() {
         List<Object> row = Collections.singletonList("value");
-        MultipleLocalDataMergedResult actual = new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(row));
         assertTrue(actual.next());
         assertFalse(actual.wasNull());
     }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResultTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResultTest.java
deleted file mode 100644
index 348a7a2390e..00000000000
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/common/SingleLocalDataMergedResultTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.sharding.merge.dal.common;
-
-import org.junit.Test;
-
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-public final class SingleLocalDataMergedResultTest {
-    
-    @Test
-    public void assertNext() {
-        SingleLocalDataMergedResult actual = new SingleLocalDataMergedResult(Collections.singleton("value"));
-        assertTrue(actual.next());
-        assertFalse(actual.next());
-    }
-    
-    @Test
-    public void assertGetValue() {
-        SingleLocalDataMergedResult actual = new SingleLocalDataMergedResult(Collections.singleton("value"));
-        assertTrue(actual.next());
-        assertThat(actual.getValue(1, Object.class).toString(), is("value"));
-    }
-    
-    @Test
-    public void assertGetCalendarValue() {
-        SingleLocalDataMergedResult actual = new SingleLocalDataMergedResult(Collections.singleton(new Date(0L)));
-        assertTrue(actual.next());
-        assertThat(actual.getCalendarValue(1, Object.class, Calendar.getInstance()), is(new Date(0L)));
-    }
-    
-    @Test(expected = SQLFeatureNotSupportedException.class)
-    public void assertGetInputStream() throws SQLException {
-        SingleLocalDataMergedResult actual = new SingleLocalDataMergedResult(Collections.singleton("value"));
-        actual.getInputStream(1, "Ascii");
-    }
-    
-    @Test
-    public void assertWasNull() {
-        SingleLocalDataMergedResult actual = new SingleLocalDataMergedResult(Collections.singleton("value"));
-        assertTrue(actual.next());
-        assertFalse(actual.wasNull());
-    }
-}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowConnectionIdExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowConnectionIdExecutor.java
index 67a04b21c4b..b6dddb5308b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowConnectionIdExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowConnectionIdExecutor.java
@@ -24,7 +24,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.Collections;
@@ -41,7 +41,7 @@ public final class ShowConnectionIdExecutor implements DatabaseAdminQueryExecuto
     
     @Override
     public void execute(final ConnectionSession connectionSession) {
-        mergedResult = new SingleLocalDataMergedResult(Collections.singleton(connectionSession.getConnectionId()));
+        mergedResult = new LocalDataMergedResult(Collections.singleton(Collections.singletonList(connectionSession.getConnectionId())));
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentDatabaseExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentDatabaseExecutor.java
index 613d23d9f5d..b22d3a4c146 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentDatabaseExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentDatabaseExecutor.java
@@ -24,7 +24,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.Collections;
@@ -41,7 +41,7 @@ public final class ShowCurrentDatabaseExecutor implements DatabaseAdminQueryExec
     
     @Override
     public void execute(final ConnectionSession connectionSession) {
-        mergedResult = new SingleLocalDataMergedResult(Collections.singleton(connectionSession.getDatabaseName()));
+        mergedResult = new LocalDataMergedResult(Collections.singleton(Collections.singletonList(connectionSession.getDatabaseName())));
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentUserExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentUserExecutor.java
index 7c3be75f96e..8c0691b3c91 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentUserExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowCurrentUserExecutor.java
@@ -29,7 +29,7 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.Collection;
@@ -54,7 +54,7 @@ public final class ShowCurrentUserExecutor implements DatabaseAdminQueryExecutor
         Optional<Grantee> grantee = rules.stream().filter(each -> each instanceof AuthorityRule)
                 .map(each -> ((AuthorityRule) each).findUser(connectionSession.getGrantee())).filter(Optional::isPresent)
                 .map(Optional::get).map(ShardingSphereUser::getGrantee).findFirst();
-        mergedResult = new SingleLocalDataMergedResult(Collections.singleton(grantee.isPresent() ? grantee.get().toString() : ""));
+        mergedResult = new LocalDataMergedResult(Collections.singleton(Collections.singletonList(grantee.isPresent() ? grantee.get().toString() : "")));
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
index 46ff53c3c92..e7f06369fe0 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
@@ -28,7 +28,7 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
 
@@ -36,6 +36,7 @@ import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -51,14 +52,14 @@ public final class ShowDatabasesExecutor implements DatabaseAdminQueryExecutor {
     
     @Override
     public void execute(final ConnectionSession connectionSession) {
-        mergedResult = new SingleLocalDataMergedResult(getDatabaseNames(connectionSession));
+        mergedResult = new LocalDataMergedResult(getDatabaseNames(connectionSession));
     }
     
-    private Collection<Object> getDatabaseNames(final ConnectionSession connectionSession) {
-        Collection<Object> result = new LinkedList<>();
+    private Collection<List<Object>> getDatabaseNames(final ConnectionSession connectionSession) {
+        List<List<Object>> result = new LinkedList<>();
         for (String each : ProxyContext.getInstance().getAllDatabaseNames()) {
             if (checkLikePattern(each) && SQLCheckEngine.check(each, getRules(each), connectionSession.getGrantee())) {
-                result.add(each);
+                result.add(Collections.singletonList(each));
             }
         }
         return result;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTransactionExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTransactionExecutor.java
index d90663aa70c..2ea6651fae1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTransactionExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTransactionExecutor.java
@@ -25,7 +25,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.Collections;
@@ -48,7 +48,7 @@ public final class ShowTransactionExecutor implements DatabaseAdminQueryExecutor
     @Override
     public void execute(final ConnectionSession connectionSession) {
         String row = functionName.equals(TRANSACTION_ISOLATION) ? "REPEATABLE-READ" : "0";
-        mergedResult = new SingleLocalDataMergedResult(Collections.singleton(row));
+        mergedResult = new LocalDataMergedResult(Collections.singleton(Collections.singletonList(row)));
     }
     
     @Override
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 74b36dfbeb7..ff67c96961f 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
@@ -25,7 +25,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.executor.DatabaseAdminQueryExecutor;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.Collections;
@@ -42,7 +42,7 @@ public final class ShowVersionExecutor implements DatabaseAdminQueryExecutor {
     
     @Override
     public void execute(final ConnectionSession connectionSession) {
-        mergedResult = new SingleLocalDataMergedResult(Collections.singleton(MySQLServerInfo.getServerVersion(connectionSession.getDatabaseName())));
+        mergedResult = new LocalDataMergedResult(Collections.singleton(Collections.singletonList(MySQLServerInfo.getServerVersion(connectionSession.getDatabaseName()))));
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
index 3139e9a8f46..d0a64c4733b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/QueryableRALBackendHandler.java
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.proxy.backend.response.data.impl.TextQueryRespo
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
-import org.apache.shardingsphere.sharding.merge.dal.common.MultipleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.SQLException;
 import java.sql.Types;
@@ -59,7 +59,7 @@ public abstract class QueryableRALBackendHandler<E extends RALStatement> extends
     }
     
     private MergedResult createMergedResult() throws SQLException {
-        return new MultipleLocalDataMergedResult(getRows(ProxyContext.getInstance().getContextManager()));
+        return new LocalDataMergedResult(getRows(ProxyContext.getInstance().getContextManager()));
     }
     
     @Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowReadwriteSplittingHintStatusExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowReadwriteSplittingHintStatusExecutor.java
index 28c188beb88..5bf24f238ad 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowReadwriteSplittingHintStatusExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowReadwriteSplittingHintStatusExecutor.java
@@ -23,7 +23,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
 import org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.hint.HintSourceType;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.hint.ShowReadwriteSplittingHintStatusStatement;
-import org.apache.shardingsphere.sharding.merge.dal.common.MultipleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.ArrayList;
@@ -46,7 +46,7 @@ public final class ShowReadwriteSplittingHintStatusExecutor extends AbstractHint
     @Override
     protected MergedResult createMergedResult() {
         List<Object> row = createRow(HintManager.isWriteRouteOnly() ? HintSourceType.WRITE.getValue() : HintSourceType.AUTO.getValue());
-        return new MultipleLocalDataMergedResult(Collections.singletonList(row));
+        return new LocalDataMergedResult(Collections.singletonList(row));
     }
     
     private List<Object> createRow(final String source) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowShardingHintStatusExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowShardingHintStatusExecutor.java
index 991cc0c090f..698358d0f41 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowShardingHintStatusExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/hint/executor/ShowShardingHintStatusExecutor.java
@@ -29,7 +29,7 @@ import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.hint.HintShardingType;
 import org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.hint.result.ShowShardingHintStatusResult;
 import org.apache.shardingsphere.sharding.distsql.parser.statement.hint.ShowShardingHintStatusStatement;
-import org.apache.shardingsphere.sharding.merge.dal.common.MultipleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 
 import java.sql.Types;
 import java.util.ArrayList;
@@ -94,7 +94,7 @@ public final class ShowShardingHintStatusExecutor extends AbstractHintQueryExecu
         for (ShowShardingHintStatusResult each : showShardingHintStatusResults) {
             values.add(createRow(each));
         }
-        return new MultipleLocalDataMergedResult(values);
+        return new LocalDataMergedResult(values);
     }
     
     private List<Object> createRow(final ShowShardingHintStatusResult showShardingHintStatusResult) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
index da529fa53b8..d3d23803978 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandlerTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin;
 
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContext;
@@ -34,43 +33,38 @@ import org.apache.shardingsphere.proxy.backend.response.header.query.QueryRespon
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.admin.postgresql.executor.SelectTableExecutor;
 import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
-import org.apache.shardingsphere.sharding.merge.dal.common.SingleLocalDataMergedResult;
+import org.apache.shardingsphere.sharding.merge.dal.common.LocalDataMergedResult;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(MockitoJUnitRunner.class)
 public final class DatabaseAdminQueryBackendHandlerTest extends ProxyContextRestorer {
     
-    @Mock
-    private ConnectionSession connectionSession;
-    
     private DatabaseAdminQueryBackendHandler handler;
     
-    @SneakyThrows
     @Before
-    public void before() {
+    public void before() throws SQLException {
         MetaDataContexts metaDataContexts = new MetaDataContexts(mock(MetaDataPersistService.class),
                 new ShardingSphereMetaData(getDatabases(), mock(ShardingSphereRuleMetaData.class), new ConfigurationProperties(new Properties())), mock(OptimizerContext.class));
         ContextManager contextManager = new ContextManager(metaDataContexts, mock(InstanceContext.class));
         ProxyContext.init(contextManager);
+        ConnectionSession connectionSession = mock(ConnectionSession.class);
         when(connectionSession.getDatabaseName()).thenReturn("db");
         SelectTableExecutor executor = mock(SelectTableExecutor.class, RETURNS_DEEP_STUBS);
-        MergedResult mergedResult = new SingleLocalDataMergedResult(Arrays.asList("demo_ds_0", "demo_ds_1"));
+        MergedResult mergedResult = new LocalDataMergedResult(Collections.singleton(Arrays.asList("demo_ds_0", "demo_ds_1")));
         when(executor.getMergedResult()).thenReturn(mergedResult);
         when(executor.getQueryResultMetaData().getColumnCount()).thenReturn(1);
         handler = new DatabaseAdminQueryBackendHandler(connectionSession, executor);
@@ -84,23 +78,22 @@ public final class DatabaseAdminQueryBackendHandlerTest extends ProxyContextRest
         return Collections.singletonMap("db", result);
     }
     
-    @SneakyThrows
     @Test
-    public void assertExecute() {
+    public void assertExecute() throws SQLException {
         assertThat(((QueryResponseHeader) handler.execute()).getQueryHeaders().size(), is(1));
     }
     
-    @SneakyThrows
     @Test
-    public void assertNext() {
+    public void assertNext() throws SQLException {
         handler.execute();
         assertTrue(handler.next());
+        assertFalse(handler.next());
     }
     
-    @SneakyThrows
     @Test
-    public void assertGetRowData() {
+    public void assertGetRowData() throws SQLException {
         handler.execute();
+        assertTrue(handler.next());
         assertThat(handler.getRowData().size(), is(1));
     }
 }