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 7db80d15c0e Remove SQLException on DatabaseChangedHandler.handle()
(#35080)
7db80d15c0e is described below
commit 7db80d15c0ece41a996df3648e0d7984e417fcda
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Mar 26 21:10:42 2025 +0800
Remove SQLException on DatabaseChangedHandler.handle() (#35080)
* Refactor DataChangedEventListenerRegistry
* Remove SQLException on DatabaseChangedHandler.handle()
* Remove SQLException on DatabaseChangedHandler.handle()
* Remove SQLException on DatabaseChangedHandler.handle()
---
.../manager/rule/DatabaseRuleItemManager.java | 23 ++++++++++++------
.../handler/database/DatabaseChangedHandler.java | 5 +---
.../rule/RuleItemConfigurationChangedHandler.java | 3 +--
.../type/DatabaseMetaDataChangedListener.java | 12 +---------
...medRuleItemConfigurationChangedHandlerTest.java | 12 ++++------
...queRuleItemConfigurationChangedHandlerTest.java | 12 ++++------
.../StandaloneMetaDataManagerPersistService.java | 28 ++++++----------------
...tandaloneMetaDataManagerPersistServiceTest.java | 4 ++--
8 files changed, 38 insertions(+), 61 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
index 0766dcbb97e..4342960210f 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/DatabaseRuleItemManager.java
@@ -23,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
import
org.apache.shardingsphere.infra.config.rule.checker.DatabaseRuleConfigurationEmptyChecker;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
@@ -50,10 +51,10 @@ public final class DatabaseRuleItemManager {
* Alter rule item.
*
* @param databaseRuleNodePath database rule node path
- * @throws SQLException SQL Exception
+ * @throws SQLWrapperException SQL wrapper exception
*/
@SuppressWarnings({"rawtypes", "unchecked"})
- public void alter(final DatabaseRuleNodePath databaseRuleNodePath) throws
SQLException {
+ public void alter(final DatabaseRuleNodePath databaseRuleNodePath) {
RuleItemConfigurationChangedProcessor processor =
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
new RuleChangedItemType(databaseRuleNodePath.getRuleType(),
databaseRuleNodePath.getDatabaseRuleItem().getType()));
String yamlContent =
metaDataPersistFacade.getVersionService().loadContent(new
VersionNodePath(databaseRuleNodePath));
@@ -62,7 +63,11 @@ public final class DatabaseRuleItemManager {
String itemName = databaseRuleNodePath.getDatabaseRuleItem().getName();
synchronized (this) {
processor.changeRuleItemConfiguration(itemName, currentRuleConfig,
processor.swapRuleItemConfiguration(itemName, yamlContent));
- databaseRuleConfigManager.refresh(databaseName, currentRuleConfig,
true);
+ try {
+ databaseRuleConfigManager.refresh(databaseName,
currentRuleConfig, true);
+ } catch (final SQLException ex) {
+ throw new SQLWrapperException(ex);
+ }
}
}
@@ -70,10 +75,10 @@ public final class DatabaseRuleItemManager {
* Drop rule item.
*
* @param databaseRuleNodePath database rule node path
- * @throws SQLException SQL Exception
+ * @throws SQLWrapperException SQL wrapper exception
*/
@SuppressWarnings({"rawtypes", "unchecked"})
- public void drop(final DatabaseRuleNodePath databaseRuleNodePath) throws
SQLException {
+ public void drop(final DatabaseRuleNodePath databaseRuleNodePath) {
String databaseName =
databaseRuleNodePath.getDatabase().getDatabaseName();
Preconditions.checkState(metaDataContexts.getMetaData().containsDatabase(databaseName),
"No database '%s' exists.", databaseName);
RuleItemConfigurationChangedProcessor processor =
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
@@ -82,8 +87,12 @@ public final class DatabaseRuleItemManager {
String itemName = null == databaseRuleNodePath.getDatabaseRuleItem() ?
null : databaseRuleNodePath.getDatabaseRuleItem().getName();
synchronized (this) {
processor.dropRuleItemConfiguration(itemName, currentRuleConfig);
- databaseRuleConfigManager.refresh(databaseName, currentRuleConfig,
-
!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class,
currentRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration)
currentRuleConfig));
+ try {
+ databaseRuleConfigManager.refresh(databaseName,
currentRuleConfig,
+
!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class,
currentRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration)
currentRuleConfig));
+ } catch (final SQLException ex) {
+ throw new SQLWrapperException(ex);
+ }
}
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java
index 1f00f408de3..1ccd88b9d0f 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/DatabaseChangedHandler.java
@@ -20,8 +20,6 @@ package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database
import org.apache.shardingsphere.mode.event.DataChangedEvent;
import org.apache.shardingsphere.mode.node.path.NodePath;
-import java.sql.SQLException;
-
/**
* Database changed handler.
*/
@@ -40,7 +38,6 @@ public interface DatabaseChangedHandler {
*
* @param databaseName database name
* @param event data changed event
- * @throws SQLException SQL exception
*/
- void handle(String databaseName, DataChangedEvent event) throws
SQLException;
+ void handle(String databaseName, DataChangedEvent event);
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
index d02fc566d11..f3c98e50a1f 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleItemConfigurationChangedHandler.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.
import
org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedNodePathBuilder;
import
org.apache.shardingsphere.mode.node.path.type.database.metadata.rule.DatabaseRuleNodePath;
-import java.sql.SQLException;
import java.util.Optional;
/**
@@ -38,7 +37,7 @@ public abstract class RuleItemConfigurationChangedHandler
implements DatabaseLea
private final RuleItemChangedNodePathBuilder
ruleItemChangedNodePathBuilder = new RuleItemChangedNodePathBuilder();
@Override
- public final void handle(final String databaseName, final DataChangedEvent
event) throws SQLException {
+ public final void handle(final String databaseName, final DataChangedEvent
event) {
Optional<DatabaseRuleNodePath> databaseRuleNodePath =
ruleItemChangedNodePathBuilder.build(databaseName, event.getKey());
if (!databaseRuleNodePath.isPresent()) {
return;
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index 952238a995e..88bfa235b4f 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.mode.manager.cluster.dispatch.listener.type;
-import
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
import
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -38,7 +37,6 @@ import
org.apache.shardingsphere.mode.node.path.type.database.metadata.DatabaseM
import org.apache.shardingsphere.mode.node.path.version.VersionNodePath;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
-import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
@@ -79,7 +77,7 @@ public final class DatabaseMetaDataChangedListener implements
DataChangedEventLi
&& !new
ActiveVersionChecker(contextManager.getPersistServiceFacade().getRepository()).checkSame(event))
{
return;
}
- handle(each, databaseName.get(), event);
+ each.handle(databaseName.get(), event);
return;
}
}
@@ -93,12 +91,4 @@ public final class DatabaseMetaDataChangedListener
implements DataChangedEventLi
}
return false;
}
-
- private void handle(final DatabaseChangedHandler handler, final String
databaseName, final DataChangedEvent event) {
- try {
- handler.handle(databaseName, event);
- } catch (final SQLException ex) {
- throw new SQLWrapperException(ex);
- }
- }
}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
index 0603f4b1cf3..43c7c4534ed 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/NamedRuleItemConfigurationChangedHandlerTest.java
@@ -29,8 +29,6 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.sql.SQLException;
-
import static
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -50,35 +48,35 @@ class NamedRuleItemConfigurationChangedHandlerTest {
}
@Test
- void assertHandleWithInvalidPath() throws SQLException {
+ void assertHandleWithInvalidPath() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture", "0", Type.ADDED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).alter(any());
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).drop(any());
}
@Test
- void assertHandleWithIgnoreType() throws SQLException {
+ void assertHandleWithIgnoreType() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
"0", Type.IGNORED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).alter(any());
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).drop(any());
}
@Test
- void assertHandleWithAddItem() throws SQLException {
+ void assertHandleWithAddItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
"0", Type.ADDED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager())
.alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture",
new DatabaseRuleItem("named", "foo_rule_item"))));
}
@Test
- void assertHandleWithAlterItem() throws SQLException {
+ void assertHandleWithAlterItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
"0", Type.UPDATED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager())
.alter(deepEq(new DatabaseRuleNodePath("foo_db", "fixture",
new DatabaseRuleItem("named", "foo_rule_item"))));
}
@Test
- void assertHandleDropItem() throws SQLException {
+ void assertHandleDropItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/named/foo_rule_item/active_version",
"0", Type.DELETED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(deepEq(new
DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("named",
"foo_rule_item"))));
}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
index c239c7ff4ed..c152d1ca666 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/type/UniqueRuleItemConfigurationChangedHandlerTest.java
@@ -29,8 +29,6 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import java.sql.SQLException;
-
import static
org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -50,33 +48,33 @@ class UniqueRuleItemConfigurationChangedHandlerTest {
}
@Test
- void assertHandleWithInvalidPath() throws SQLException {
+ void assertHandleWithInvalidPath() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture", "foo", Type.ADDED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).alter(any());
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).drop(any());
}
@Test
- void assertHandleWithIgnoreType() throws SQLException {
+ void assertHandleWithIgnoreType() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0",
Type.IGNORED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).alter(any());
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager(),
times(0)).drop(any());
}
@Test
- void assertHandleWithAddItem() throws SQLException {
+ void assertHandleWithAddItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0",
Type.ADDED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))));
}
@Test
- void assertHandleWithAlterItem() throws SQLException {
+ void assertHandleWithAlterItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0",
Type.UPDATED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).alter(deepEq(new
DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))));
}
@Test
- void assertHandleWitDropItem() throws SQLException {
+ void assertHandleWitDropItem() {
handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/rules/fixture/unique/active_version", "0",
Type.DELETED));
verify(contextManager.getMetaDataContextManager().getDatabaseRuleItemManager()).drop(deepEq(new
DatabaseRuleNodePath("foo_db", "fixture", new DatabaseRuleItem("unique"))));
}
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 36fdc7f6450..d55e5033665 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -224,11 +224,7 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
for (MetaDataVersion each : metaDataVersions) {
Optional<DatabaseRuleNodePath> databaseRuleNodePath =
ruleItemChangedNodePathBuilder.build(databaseName, new
VersionNodePath(each.getNodePath()).getActiveVersionPath());
if (databaseRuleNodePath.isPresent() &&
activeVersionChecker.checkSame(new VersionNodePath(databaseRuleNodePath.get()),
each.getActiveVersion())) {
- try {
-
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
- } catch (final SQLException ex) {
- throw new SQLWrapperException(ex);
- }
+
metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get());
}
}
}
@@ -250,14 +246,8 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
private void removeRuleItem(final String databaseName, final
Collection<MetaDataVersion> metaDataVersions) {
RuleItemChangedNodePathBuilder ruleItemChangedNodePathBuilder = new
RuleItemChangedNodePathBuilder();
for (MetaDataVersion each : metaDataVersions) {
- Optional<DatabaseRuleNodePath> databaseRuleNodePath =
ruleItemChangedNodePathBuilder.build(databaseName, new
VersionNodePath(each.getNodePath()).getActiveVersionPath());
- if (databaseRuleNodePath.isPresent()) {
- try {
-
metaDataContextManager.getDatabaseRuleItemManager().drop(databaseRuleNodePath.get());
- } catch (final SQLException ex) {
- throw new SQLWrapperException(ex);
- }
- }
+ ruleItemChangedNodePathBuilder.build(databaseName, new
VersionNodePath(each.getNodePath()).getActiveVersionPath())
+ .ifPresent(optional ->
metaDataContextManager.getDatabaseRuleItemManager().drop(optional));
}
}
@@ -281,14 +271,10 @@ public final class
StandaloneMetaDataManagerPersistService implements MetaDataMa
public void removeRuleConfiguration(final ShardingSphereDatabase database,
final RuleConfiguration toBeRemovedRuleConfig, final String ruleType) {
Collection<String> needReloadTables = getNeedReloadTables(database,
toBeRemovedRuleConfig);
metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(),
ruleType);
- try {
- metaDataContextManager.getDatabaseRuleItemManager().drop(new
DatabaseRuleNodePath(database.getName(), ruleType, null));
- Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap =
metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(
- database.getName(),
metaDataContextManager.getMetaDataContexts(), needReloadTables);
- alterTables(database, schemaAndTablesMap);
- } catch (final SQLException ex) {
- throw new SQLWrapperException(ex);
- }
+ metaDataContextManager.getDatabaseRuleItemManager().drop(new
DatabaseRuleNodePath(database.getName(), ruleType, null));
+ Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap =
metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(
+ database.getName(),
metaDataContextManager.getMetaDataContexts(), needReloadTables);
+ alterTables(database, schemaAndTablesMap);
OrderedServicesCache.clearCache();
}
diff --git
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 5e46430d1be..f552fc05b4b 100644
---
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -163,7 +163,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
}
@Test
- void assertAlterRuleConfiguration() throws SQLException {
+ void assertAlterRuleConfiguration() {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
@@ -186,7 +186,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
}
@Test
- void assertRemoveRuleConfigurationItem() throws SQLException {
+ void assertRemoveRuleConfigurationItem() {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));