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

chengzhang 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 68207cb7302 Refactor usage of ShardingSphereDatabase.schemas (#33855)
68207cb7302 is described below

commit 68207cb73026197733824042a3f19da743379a6d
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Dec 1 11:36:52 2024 +0800

    Refactor usage of ShardingSphereDatabase.schemas (#33855)
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
    
    * Refactor usage of ShardingSphereDatabase.schemas
---
 .../rewrite/condition/EncryptConditionEngine.java  |  9 ++---
 .../context/EncryptSQLRewriteContextDecorator.java |  2 +-
 ...cryptPredicateRightValueTokenGeneratorTest.java |  7 ++--
 .../dql/groupby/GroupByMemoryMergedResultTest.java |  2 +-
 .../infra/checker/SupportedSQLCheckEngine.java     | 11 +++---
 .../metadata/database/ShardingSphereDatabase.java  |  9 +++++
 .../schema/manager/GenericSchemaManager.java       | 37 ++++++++++---------
 .../MySQLShardingSphereStatisticsBuilder.java      |  8 ++---
 .../PostgreSQLShardingSphereStatisticsBuilder.java | 24 ++++++-------
 .../collector/tables/PgClassTableCollector.java    |  9 ++---
 .../tables/PgNamespaceTableCollector.java          |  5 ++-
 .../schema/manager/GenericSchemaManagerTest.java   | 42 +++++++++++++---------
 ...tgreSQLShardingSphereStatisticsBuilderTest.java | 14 ++++----
 .../infra/rewrite/context/SQLRewriteContext.java   |  2 +-
 .../token/common/generator/SQLTokenGenerators.java | 17 +++++----
 .../rewrite/context/SQLRewriteContextTest.java     |  2 +-
 .../engine/GenericSQLRewriteEngineTest.java        |  2 +-
 .../rewrite/engine/RouteSQLRewriteEngineTest.java  |  2 +-
 .../common/generator/SQLTokenGeneratorsTest.java   | 12 ++++---
 .../pipeline/cdc/util/CDCSchemaTableUtils.java     | 19 +++++-----
 .../pipeline/cdc/util/CDCSchemaTableUtilsTest.java |  5 ++-
 .../metadata/persist/MetaDataPersistService.java   | 16 ++++-----
 .../factory/InternalMetaDataFactoryTest.java       |  6 ++--
 .../persist/MetaDataPersistServiceTest.java        | 19 +++++-----
 .../schema/SchemaMetaDataPersistServiceTest.java   |  4 +--
 .../sql/SingleDropSchemaSupportedCheckerTest.java  |  5 ++-
 .../sql/SingleDropTableSupportedCheckerTest.java   |  4 +--
 .../executor/utils/StatisticsAssembleUtils.java    | 12 +++----
 .../context/planner/OptimizerMetaDataFactory.java  |  5 ++-
 .../metadata/schema/SQLFederationDatabase.java     |  7 ++--
 .../mode/metadata/MetaDataContextManager.java      | 16 ++++-----
 .../mode/metadata/MetaDataContextsFactory.java     |  6 ++--
 .../manager/DatabaseRuleConfigurationManager.java  | 10 ------
 .../mode/metadata/manager/StorageUnitManager.java  |  6 ++--
 .../mode/manager/ContextManagerTest.java           |  5 ++-
 .../manager/SchemaMetaDataManagerTest.java         | 19 +++++-----
 .../ClusterMetaDataManagerPersistService.java      |  4 +--
 .../StandaloneMetaDataManagerPersistService.java   | 10 +++---
 .../header/query/MySQLQueryHeaderBuilderTest.java  |  2 +-
 ...enGaussSystemCatalogAdminQueryExecutorTest.java | 13 ++++---
 .../engine/scenario/EncryptSQLRewriterIT.java      |  3 +-
 .../rewrite/engine/scenario/MixSQLRewriterIT.java  |  3 +-
 .../engine/scenario/ShardingSQLRewriterIT.java     |  3 +-
 43 files changed, 208 insertions(+), 210 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
index db6cb8b5495..b44cb42d32e 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BetweenExpression;
@@ -63,9 +64,9 @@ public final class EncryptConditionEngine {
     
     private static final Set<String> SUPPORTED_COMPARE_OPERATOR = new 
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
     
-    private final EncryptRule encryptRule;
+    private final EncryptRule rule;
     
-    private final Map<String, ShardingSphereSchema> schemas;
+    private final ShardingSphereDatabase database;
     
     static {
         LOGICAL_OPERATOR.add("AND");
@@ -96,7 +97,7 @@ public final class EncryptConditionEngine {
                                                                 final 
SQLStatementContext sqlStatementContext, final String databaseName) {
         Collection<EncryptCondition> result = new LinkedList<>();
         String defaultSchema = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
-        ShardingSphereSchema schema = ((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
+        ShardingSphereSchema schema = ((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
 -> database.getSchema(defaultSchema));
         Map<String, String> expressionTableNames = ((TableAvailable) 
sqlStatementContext).getTablesContext().findTableNames(columnSegments, schema);
         for (WhereSegment each : whereSegments) {
             Collection<AndPredicate> andPredicates = 
ExpressionExtractor.extractAndPredicates(each.getExpr());
@@ -122,7 +123,7 @@ public final class EncryptConditionEngine {
         }
         for (ColumnSegment each : ColumnExtractor.extract(expression)) {
             String tableName = 
expressionTableNames.getOrDefault(each.getExpression(), "");
-            Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
+            Optional<EncryptTable> encryptTable = 
rule.findEncryptTable(tableName);
             if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
                 createEncryptCondition(expression, 
tableName).ifPresent(encryptConditions::add);
             }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
index a85849fc096..6d9a24a1e8d 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
@@ -94,7 +94,7 @@ public final class EncryptSQLRewriteContextDecorator 
implements SQLRewriteContex
         Collection<WhereSegment> whereSegments = 
SQLStatementContextExtractor.getWhereSegments((WhereAvailable) 
sqlStatementContext, allSubqueryContexts);
         Collection<ColumnSegment> columnSegments = 
SQLStatementContextExtractor.getColumnSegments((WhereAvailable) 
sqlStatementContext, allSubqueryContexts);
         return new EncryptConditionEngine(
-                rule, 
sqlRewriteContext.getDatabase().getSchemas()).createEncryptConditions(whereSegments,
 columnSegments, sqlStatementContext, 
sqlRewriteContext.getDatabase().getName());
+                rule, 
sqlRewriteContext.getDatabase()).createEncryptConditions(whereSegments, 
columnSegments, sqlStatementContext, sqlRewriteContext.getDatabase().getName());
     }
     
     private void rewriteParameters(final SQLRewriteContext sqlRewriteContext, 
final Collection<ParameterRewriter> parameterRewriters) {
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java
index fdf1e04dee9..00043ff32fa 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java
@@ -22,18 +22,19 @@ import 
org.apache.shardingsphere.encrypt.rewrite.condition.EncryptConditionEngin
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.fixture.EncryptGeneratorFixtureBuilder;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collection;
-import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 class EncryptPredicateRightValueTokenGeneratorTest {
     
@@ -61,7 +62,9 @@ class EncryptPredicateRightValueTokenGeneratorTest {
     }
     
     private Collection<EncryptCondition> getEncryptConditions(final 
UpdateStatementContext updateStatementContext) {
-        return new 
EncryptConditionEngine(EncryptGeneratorFixtureBuilder.createEncryptRule(), 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mock(ShardingSphereSchema.class)))
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereSchema.class));
+        return new 
EncryptConditionEngine(EncryptGeneratorFixtureBuilder.createEncryptRule(), 
database)
                 
.createEncryptConditions(updateStatementContext.getWhereSegments(), 
updateStatementContext.getColumnSegments(), updateStatementContext, 
DefaultDatabase.LOGIC_NAME);
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
index d454786ee9f..345aa8c6809 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
@@ -207,7 +207,7 @@ class GroupByMemoryMergedResultTest {
         when(table.getAllColumns()).thenReturn(Collections.emptyList());
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
-        
when(database.getSchemas()).thenReturn(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
 schema));
+        
when(database.getAllSchemas()).thenReturn(Collections.singleton(schema));
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         ShardingDQLResultMerger merger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, "MySQL"));
         MergedResult actual = merger.merge(Arrays.asList(queryResult, 
queryResult, queryResult), createSelectStatementContext(database), database, 
mock(ConnectionContext.class));
diff --git 
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
 
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
index dd562faae12..f97aa99fc7c 100644
--- 
a/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
+++ 
b/infra/checker/src/main/java/org/apache/shardingsphere/infra/checker/SupportedSQLCheckEngine.java
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 
 import java.util.Collection;
-import java.util.Map;
 import java.util.Map.Entry;
 
 /**
@@ -43,7 +42,7 @@ public final class SupportedSQLCheckEngine {
      */
     @SuppressWarnings({"rawtypes", "unchecked"})
     public void checkSQL(final Collection<ShardingSphereRule> rules, final 
SQLStatementContext sqlStatementContext, final ShardingSphereDatabase database) 
{
-        ShardingSphereSchema currentSchema = 
getCurrentSchema(sqlStatementContext, database.getSchemas(), 
database.getName());
+        ShardingSphereSchema currentSchema = 
getCurrentSchema(sqlStatementContext, database);
         for (Entry<ShardingSphereRule, SupportedSQLCheckersBuilder> entry : 
OrderedSPILoader.getServices(SupportedSQLCheckersBuilder.class, 
rules).entrySet()) {
             Collection<SupportedSQLChecker> checkers = 
entry.getValue().getSupportedSQLCheckers();
             for (SupportedSQLChecker each : checkers) {
@@ -54,8 +53,10 @@ public final class SupportedSQLCheckEngine {
         }
     }
     
-    private ShardingSphereSchema getCurrentSchema(final SQLStatementContext 
sqlStatementContext, final Map<String, ShardingSphereSchema> schemas, final 
String databaseName) {
-        ShardingSphereSchema defaultSchema = schemas.get(new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
-        return sqlStatementContext instanceof TableAvailable ? 
((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElse(defaultSchema)
 : defaultSchema;
+    private ShardingSphereSchema getCurrentSchema(final SQLStatementContext 
sqlStatementContext, final ShardingSphereDatabase database) {
+        ShardingSphereSchema defaultSchema = database.getSchema(new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
+        return sqlStatementContext instanceof TableAvailable
+                ? ((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(database::getSchema).orElse(defaultSchema)
+                : defaultSchema;
     }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index af6b6be0e05..d3f962eea88 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -138,6 +138,15 @@ public final class ShardingSphereDatabase {
         return new ResourceMetaData(dataSources, storageUnits);
     }
     
+    /**
+     * Get all schemas.
+     *
+     * @return all schemas
+     */
+    public Collection<ShardingSphereSchema> getAllSchemas() {
+        return schemas.values();
+    }
+    
     /**
      * Judge contains schema from database or not.
      *
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManager.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManager.java
index aea1204ff54..60d4f531e88 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManager.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManager.java
@@ -19,14 +19,13 @@ package 
org.apache.shardingsphere.infra.metadata.database.schema.manager;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
 /**
@@ -38,15 +37,15 @@ public final class GenericSchemaManager {
     /**
      * Get to be added tables by schemas.
      *
-     * @param reloadSchemas reload schemas
-     * @param currentSchemas current schemas
+     * @param reloadDatabase reload database
+     * @param currentDatabase current database
      * @return To be added table meta data
      */
-    public static Map<String, ShardingSphereSchema> 
getToBeAddedTablesBySchemas(final Map<String, ShardingSphereSchema> 
reloadSchemas, final Map<String, ShardingSphereSchema> currentSchemas) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(currentSchemas.size(), 1F);
-        reloadSchemas.entrySet().stream().filter(entry -> 
!currentSchemas.containsKey(entry.getKey())).forEach(entry -> 
result.put(entry.getKey(), entry.getValue()));
-        reloadSchemas.entrySet().stream().filter(entry -> 
currentSchemas.containsKey(entry.getKey())).collect(Collectors.toMap(Entry::getKey,
 Entry::getValue))
-                .forEach((key, value) -> result.put(key, 
getToBeAddedTablesBySchema(value, currentSchemas.get(key))));
+    public static Collection<ShardingSphereSchema> 
getToBeAddedTablesBySchemas(final ShardingSphereDatabase reloadDatabase, final 
ShardingSphereDatabase currentDatabase) {
+        Collection<ShardingSphereSchema> result = new LinkedList<>();
+        reloadDatabase.getAllSchemas().stream().filter(each -> 
!currentDatabase.containsSchema(each.getName())).forEach(result::add);
+        reloadDatabase.getAllSchemas().stream().filter(each -> 
currentDatabase.containsSchema(each.getName())).collect(Collectors.toList())
+                .forEach(each -> result.add(getToBeAddedTablesBySchema(each, 
currentDatabase.getSchema(each.getName()))));
         return result;
     }
     
@@ -68,14 +67,14 @@ public final class GenericSchemaManager {
     /**
      * Get to be dropped tables by schemas.
      *
-     * @param reloadSchemas reload schemas
-     * @param currentSchemas current schemas
+     * @param reloadDatabase reload database
+     * @param currentDatabase current database
      * @return to be dropped table
      */
-    public static Map<String, ShardingSphereSchema> 
getToBeDroppedTablesBySchemas(final Map<String, ShardingSphereSchema> 
reloadSchemas, final Map<String, ShardingSphereSchema> currentSchemas) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(currentSchemas.size(), 1F);
-        currentSchemas.entrySet().stream().filter(entry -> 
reloadSchemas.containsKey(entry.getKey())).collect(Collectors.toMap(Entry::getKey,
 Entry::getValue))
-                .forEach((key, value) -> result.put(key, 
getToBeDroppedTablesBySchema(reloadSchemas.get(key), value)));
+    public static Collection<ShardingSphereSchema> 
getToBeDroppedTablesBySchemas(final ShardingSphereDatabase reloadDatabase, 
final ShardingSphereDatabase currentDatabase) {
+        Collection<ShardingSphereSchema> result = new LinkedList<>();
+        currentDatabase.getAllSchemas().stream().filter(entry -> 
reloadDatabase.containsSchema(entry.getName())).collect(Collectors.toMap(ShardingSphereSchema::getName,
 each -> each))
+                .forEach((key, value) -> 
result.add(getToBeDroppedTablesBySchema(reloadDatabase.getSchema(key), value)));
         return result;
     }
     
@@ -97,11 +96,11 @@ public final class GenericSchemaManager {
     /**
      * Get to be dropped schemas.
      *
-     * @param reloadSchemas reload schemas
-     * @param currentSchemas current schemas
+     * @param reloadDatabase reload database
+     * @param currentDatabase current database
      * @return to be dropped schemas
      */
-    public static Map<String, ShardingSphereSchema> 
getToBeDroppedSchemas(final Map<String, ShardingSphereSchema> reloadSchemas, 
final Map<String, ShardingSphereSchema> currentSchemas) {
-        return currentSchemas.entrySet().stream().filter(entry -> 
!reloadSchemas.containsKey(entry.getKey())).collect(Collectors.toMap(Entry::getKey,
 Entry::getValue));
+    public static Map<String, ShardingSphereSchema> 
getToBeDroppedSchemas(final ShardingSphereDatabase reloadDatabase, final 
ShardingSphereDatabase currentDatabase) {
+        return currentDatabase.getAllSchemas().stream().filter(each -> 
!reloadDatabase.containsSchema(each.getName())).collect(Collectors.toMap(ShardingSphereSchema::getName,
 each -> each));
     }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
index 51c9ebb256c..5365a50fb1e 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
@@ -37,7 +37,7 @@ import java.util.Map.Entry;
 
 public final class MySQLShardingSphereStatisticsBuilder implements 
ShardingSphereStatisticsBuilder {
     
-    private static final String SHARDING_SPHERE = "shardingsphere";
+    private static final String SHARDINGSPHERE = "shardingsphere";
     
     private static final String CLUSTER_INFORMATION = "cluster_information";
     
@@ -57,12 +57,12 @@ public final class MySQLShardingSphereStatisticsBuilder 
implements ShardingSpher
     }
     
     private void initSchemas(final ShardingSphereDatabase database, final 
ShardingSphereDatabaseData databaseData) {
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            if (SHARDING_SPHERE.equals(entry.getKey())) {
+        for (ShardingSphereSchema each : database.getAllSchemas()) {
+            if (SHARDINGSPHERE.equals(each.getName())) {
                 ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
                 initClusterInformationTable(schemaData);
                 initShardingTableStatisticsTable(schemaData);
-                databaseData.putSchema(SHARDING_SPHERE, schemaData);
+                databaseData.putSchema(SHARDINGSPHERE, schemaData);
             }
         }
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
index 81d928444b4..75ae28d2849 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
@@ -42,7 +42,7 @@ import java.util.Map.Entry;
 
 public final class PostgreSQLShardingSphereStatisticsBuilder implements 
ShardingSphereStatisticsBuilder {
     
-    private static final String SHARDING_SPHERE = "shardingsphere";
+    private static final String SHARDINGSPHERE = "shardingsphere";
     
     private static final String CLUSTER_INFORMATION = "cluster_information";
     
@@ -68,18 +68,16 @@ public final class 
PostgreSQLShardingSphereStatisticsBuilder implements Sharding
     }
     
     private void initSchemas(final ShardingSphereDatabase database, final 
ShardingSphereDatabaseData databaseData) {
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            if (SHARDING_SPHERE.equals(entry.getKey())) {
-                ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
-                initClusterInformationTable(schemaData);
-                initShardingTableStatisticsTable(schemaData);
-                databaseData.putSchema(SHARDING_SPHERE, schemaData);
-            }
-            if (INIT_DATA_SCHEMA_TABLES.containsKey(entry.getKey())) {
-                ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
-                initTables(entry.getValue(), 
INIT_DATA_SCHEMA_TABLES.get(entry.getKey()), schemaData);
-                databaseData.putSchema(entry.getKey(), schemaData);
-            }
+        if (null != database.getSchema(SHARDINGSPHERE)) {
+            ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
+            initClusterInformationTable(schemaData);
+            initShardingTableStatisticsTable(schemaData);
+            databaseData.putSchema(SHARDINGSPHERE, schemaData);
+        }
+        for (String each : INIT_DATA_SCHEMA_TABLES.keySet()) {
+            ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
+            initTables(database.getSchema(each), 
INIT_DATA_SCHEMA_TABLES.get(each), schemaData);
+            databaseData.putSchema(each, schemaData);
         }
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
index d924c4c5695..2008dcd86d7 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
@@ -31,7 +31,6 @@ import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
@@ -49,11 +48,9 @@ public final class PgClassTableCollector implements 
ShardingSphereStatisticsColl
     public Optional<ShardingSphereTableData> collect(final String 
databaseName, final ShardingSphereTable table, final Map<String, 
ShardingSphereDatabase> databases,
                                                      final RuleMetaData 
globalRuleMetaData) throws SQLException {
         ShardingSphereTableData result = new ShardingSphereTableData(PG_CLASS);
-        long oid = 0L;
-        for (Entry<String, ShardingSphereSchema> entry : 
databases.get(databaseName).getSchemas().entrySet()) {
-            if (PUBLIC_SCHEMA.equalsIgnoreCase(entry.getKey())) {
-                result.getRows().addAll(collectForSchema(oid++, 
PUBLIC_SCHEMA_OID, entry.getValue(), table));
-            }
+        ShardingSphereSchema publicSchema = 
databases.get(databaseName).getSchema(PUBLIC_SCHEMA);
+        if (null != publicSchema) {
+            result.getRows().addAll(collectForSchema(0L, PUBLIC_SCHEMA_OID, 
publicSchema, table));
         }
         return Optional.of(result);
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
index d3213537f91..83d7eac9d91 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
@@ -30,7 +30,6 @@ import 
org.apache.shardingsphere.infra.metadata.statistics.collector.ShardingSph
 import java.sql.SQLException;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
@@ -49,8 +48,8 @@ public final class PgNamespaceTableCollector implements 
ShardingSphereStatistics
                                                      final RuleMetaData 
globalRuleMetaData) throws SQLException {
         ShardingSphereTableData result = new 
ShardingSphereTableData(PG_NAMESPACE);
         long oid = 1L;
-        for (Entry<String, ShardingSphereSchema> entry : 
databases.get(databaseName).getSchemas().entrySet()) {
-            result.getRows().add(new 
ShardingSphereRowData(getRow(PUBLIC_SCHEMA.equalsIgnoreCase(entry.getKey()) ? 
PUBLIC_SCHEMA_OID : oid++, entry.getKey(), table)));
+        for (ShardingSphereSchema each : 
databases.get(databaseName).getAllSchemas()) {
+            result.getRows().add(new 
ShardingSphereRowData(getRow(PUBLIC_SCHEMA.equalsIgnoreCase(each.getName()) ? 
PUBLIC_SCHEMA_OID : oid++, each.getName(), table)));
         }
         return Optional.of(result);
     }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManagerTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManagerTest.java
index 6d61b344d9f..fd562bbd522 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManagerTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/manager/GenericSchemaManagerTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.shardingsphere.infra.metadata.database.schema.manager;
 
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.junit.jupiter.api.Test;
@@ -30,31 +30,39 @@ import java.util.Map;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 class GenericSchemaManagerTest {
     
     @Test
     void assertGetToBeAddedTablesBySchemas() {
-        Map<String, ShardingSphereSchema> reloadSchemas = 
Collections.singletonMap("foo_schema", new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME,
-                Collections.singleton(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList())), 
Collections.emptyList()));
-        Map<String, ShardingSphereSchema> currentSchemas = 
Collections.singletonMap(
-                "foo_schema", new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, Collections.emptyList(), 
Collections.emptyList()));
-        Map<String, ShardingSphereSchema> actual = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadSchemas, currentSchemas);
+        ShardingSphereDatabase reloadDatabase = 
mock(ShardingSphereDatabase.class);
+        
when(reloadDatabase.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("foo_schema",
+                Collections.singleton(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList())), 
Collections.emptyList())));
+        ShardingSphereSchema currentSchemas = new 
ShardingSphereSchema("foo_schema", Collections.emptyList(), 
Collections.emptyList());
+        ShardingSphereDatabase currentDatabase = 
mock(ShardingSphereDatabase.class);
+        
when(currentDatabase.getAllSchemas()).thenReturn(Collections.singleton(currentSchemas));
+        when(currentDatabase.containsSchema("foo_schema")).thenReturn(true);
+        
when(currentDatabase.getSchema("foo_schema")).thenReturn(currentSchemas);
+        Collection<ShardingSphereSchema> actual = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase, 
currentDatabase);
         assertThat(actual.size(), is(1));
-        assertThat(actual.get("foo_schema").getAllTables().size(), is(1));
-        assertTrue(actual.get("foo_schema").containsTable("foo_tbl"));
+        assertThat(actual.iterator().next().getAllTables().size(), is(1));
+        assertTrue(actual.iterator().next().containsTable("foo_tbl"));
     }
     
     @Test
     void assertGetToBeDroppedTablesBySchemas() {
-        Map<String, ShardingSphereSchema> currentSchemas = 
Collections.singletonMap("foo_schema", new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME,
-                Collections.singleton(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList())), 
Collections.emptyList()));
-        Map<String, ShardingSphereSchema> reloadSchemas = 
Collections.singletonMap("foo_schema",
-                new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, 
Collections.emptyList(), Collections.emptyList()));
-        Map<String, ShardingSphereSchema> actual = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadSchemas, 
currentSchemas);
+        ShardingSphereDatabase reloadDatabase = 
mock(ShardingSphereDatabase.class);
+        when(reloadDatabase.containsSchema("foo_schema")).thenReturn(true);
+        when(reloadDatabase.getSchema("foo_schema")).thenReturn(new 
ShardingSphereSchema("foo_schema", Collections.emptyList(), 
Collections.emptyList()));
+        ShardingSphereDatabase currentDatabase = 
mock(ShardingSphereDatabase.class);
+        
when(currentDatabase.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("foo_schema",
+                Collections.singleton(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList())), 
Collections.emptyList())));
+        Collection<ShardingSphereSchema> actual = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadDatabase, 
currentDatabase);
         assertThat(actual.size(), is(1));
-        assertThat(actual.get("foo_schema").getAllTables().size(), is(1));
-        assertTrue(actual.get("foo_schema").containsTable("foo_tbl"));
+        assertThat(actual.iterator().next().getAllTables().size(), is(1));
+        assertTrue(actual.iterator().next().containsTable("foo_tbl"));
     }
     
     @Test
@@ -78,8 +86,10 @@ class GenericSchemaManagerTest {
     
     @Test
     void assertGetToBeDroppedSchemas() {
+        ShardingSphereDatabase currentDatabase = 
mock(ShardingSphereDatabase.class);
+        
when(currentDatabase.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("foo_schema")));
         Map<String, ShardingSphereSchema> actual =
-                
GenericSchemaManager.getToBeDroppedSchemas(Collections.emptyMap(), 
Collections.singletonMap("foo_schema", new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME)));
+                
GenericSchemaManager.getToBeDroppedSchemas(mock(ShardingSphereDatabase.class), 
currentDatabase);
         assertThat(actual.size(), is(1));
         assertTrue(actual.containsKey("foo_schema"));
         
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
index 713b92c1be8..2fdfcc80b86 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
@@ -52,16 +52,18 @@ class PostgreSQLShardingSphereStatisticsBuilderTest {
     
     private Map<String, ShardingSphereDatabase> mockDatabaseMap() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        Map<String, ShardingSphereSchema> schemaMap = mockSchemaMap();
-        when(database.getSchemas()).thenReturn(schemaMap);
+        ShardingSphereSchema schema = mockSchema();
+        
when(database.getAllSchemas()).thenReturn(Collections.singleton(schema));
+        when(database.getSchema("pg_catalog")).thenReturn(schema);
         return Collections.singletonMap("logic_db", database);
     }
     
-    private Map<String, ShardingSphereSchema> mockSchemaMap() {
-        ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
+    private ShardingSphereSchema mockSchema() {
+        ShardingSphereSchema result = mock(ShardingSphereSchema.class);
+        when(result.getName()).thenReturn("pg_catalog");
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         when(table.getName()).thenReturn("pg_class");
-        when(schema.getAllTables()).thenReturn(Collections.singleton(table));
-        return Collections.singletonMap("pg_catalog", schema);
+        when(result.getAllTables()).thenReturn(Collections.singleton(table));
+        return result;
     }
 }
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
index f7c7616422d..19925acda89 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
@@ -93,6 +93,6 @@ public final class SQLRewriteContext {
      * Generate SQL tokens.
      */
     public void generateSQLTokens() {
-        
sqlTokens.addAll(sqlTokenGenerators.generateSQLTokens(database.getName(), 
database.getSchemas(), sqlStatementContext, parameters, connectionContext));
+        sqlTokens.addAll(sqlTokenGenerators.generateSQLTokens(database, 
sqlStatementContext, parameters, connectionContext));
     }
 }
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGenerators.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGenerators.java
index 713e6d056c2..d87ec496b89 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGenerators.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGenerators.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.ConnectionContextAware;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.ParametersAware;
@@ -30,7 +31,7 @@ import 
org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * SQL token generators.
@@ -51,19 +52,18 @@ public final class SQLTokenGenerators {
     /**
      * Generate SQL tokens.
      *
-     * @param databaseName database name
+     * @param database database
      * @param sqlStatementContext SQL statement context
      * @param params SQL parameters
-     * @param schemas schema map
      * @param connectionContext connection context
      * @return SQL tokens
      */
     @SuppressWarnings({"rawtypes", "unchecked"})
-    public List<SQLToken> generateSQLTokens(final String databaseName, final 
Map<String, ShardingSphereSchema> schemas,
+    public List<SQLToken> generateSQLTokens(final ShardingSphereDatabase 
database,
                                             final SQLStatementContext 
sqlStatementContext, final List<Object> params, final ConnectionContext 
connectionContext) {
         List<SQLToken> result = new LinkedList<>();
         for (SQLTokenGenerator each : generators) {
-            setUpSQLTokenGenerator(each, params, databaseName, schemas, 
sqlStatementContext, result, connectionContext);
+            setUpSQLTokenGenerator(each, params, database, 
sqlStatementContext, result, connectionContext);
             if (each instanceof OptionalSQLTokenGenerator) {
                 SQLToken sqlToken = ((OptionalSQLTokenGenerator) 
each).generateSQLToken(sqlStatementContext);
                 if (!result.contains(sqlToken)) {
@@ -76,15 +76,14 @@ public final class SQLTokenGenerators {
         return result;
     }
     
-    private void setUpSQLTokenGenerator(final SQLTokenGenerator 
sqlTokenGenerator, final List<Object> params,
-                                        final String databaseName, final 
Map<String, ShardingSphereSchema> schemas,
+    private void setUpSQLTokenGenerator(final SQLTokenGenerator 
sqlTokenGenerator, final List<Object> params, final ShardingSphereDatabase 
database,
                                         final SQLStatementContext 
sqlStatementContext, final List<SQLToken> previousSQLTokens, final 
ConnectionContext connectionContext) {
         if (sqlTokenGenerator instanceof ParametersAware) {
             ((ParametersAware) sqlTokenGenerator).setParameters(params);
         }
         if (sqlTokenGenerator instanceof SchemaMetaDataAware) {
-            ((SchemaMetaDataAware) sqlTokenGenerator).setSchemas(schemas);
-            ((SchemaMetaDataAware) 
sqlTokenGenerator).setDefaultSchema(schemas.get(new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)));
+            ((SchemaMetaDataAware) 
sqlTokenGenerator).setSchemas(database.getAllSchemas().stream().collect(Collectors.toMap(ShardingSphereSchema::getName,
 each -> each)));
+            ((SchemaMetaDataAware) 
sqlTokenGenerator).setDefaultSchema(database.getSchema(new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())));
         }
         if (sqlTokenGenerator instanceof PreviousSQLTokensAware) {
             ((PreviousSQLTokensAware) 
sqlTokenGenerator).setPreviousSQLTokens(previousSQLTokens);
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
index 2734ef2468c..7a87cac3792 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
@@ -76,7 +76,7 @@ class SQLRewriteContextTest {
         
when(optionalSQLTokenGenerator.generateSQLToken(sqlStatementContext)).thenReturn(sqlToken);
         
when(collectionSQLTokenGenerator.generateSQLTokens(sqlStatementContext)).thenReturn(Collections.singleton(sqlToken));
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        
when(database.getSchemas()).thenReturn(Collections.singletonMap("test", 
mock(ShardingSphereSchema.class)));
+        when(database.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("test")));
     }
     
     @Test
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
index af9d7feae50..9cf94e4b7d5 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
@@ -73,7 +73,7 @@ class GenericSQLRewriteEngineTest {
         SQLTranslatorRule rule = new SQLTranslatorRule(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build());
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        
when(database.getSchemas()).thenReturn(Collections.singletonMap("test", 
mock(ShardingSphereSchema.class)));
+        when(database.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("test")));
         
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
         CommonSQLStatementContext sqlStatementContext = 
mock(CommonSQLStatementContext.class);
         DatabaseType databaseType = mock(DatabaseType.class);
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
index 07f0121ee2f..b416a7f26a5 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
@@ -85,7 +85,7 @@ class RouteSQLRewriteEngineTest {
         Map<String, StorageUnit> storageUnits = mockStorageUnits(databaseType);
         
when(result.getResourceMetaData().getStorageUnits()).thenReturn(storageUnits);
         when(result.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
-        when(result.getSchemas()).thenReturn(Collections.singletonMap("test", 
mock(ShardingSphereSchema.class)));
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("test")));
         return result;
     }
     
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGeneratorsTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGeneratorsTest.java
index ad1e9c03b24..713278a04c6 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGeneratorsTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/SQLTokenGeneratorsTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.rewrite.sql.token.common.generator;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
@@ -44,8 +45,10 @@ class SQLTokenGeneratorsTest {
         
when(generator.generateSQLToken(any(SQLStatementContext.class))).thenReturn(expectedToken);
         SQLTokenGenerators generators = new SQLTokenGenerators();
         generators.addAll(Collections.singleton(generator));
-        Collection<SQLToken> actualSqlTokens = generators.generateSQLTokens(
-                "sharding_db", Collections.singletonMap("test", 
mock(ShardingSphereSchema.class)), mock(SQLStatementContext.class), 
Collections.emptyList(), mock(ConnectionContext.class));
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        when(database.getName()).thenReturn("sharding_db");
+        when(database.getSchema("test")).thenReturn(new 
ShardingSphereSchema("test"));
+        Collection<SQLToken> actualSqlTokens = 
generators.generateSQLTokens(database, mock(SQLStatementContext.class), 
Collections.emptyList(), mock(ConnectionContext.class));
         assertThat(actualSqlTokens.size(), is(1));
         assertThat(actualSqlTokens.iterator().next(), is(expectedToken));
     }
@@ -58,8 +61,9 @@ class SQLTokenGeneratorsTest {
         doReturn(expectedTokens).when(generator).generateSQLTokens(any());
         SQLTokenGenerators generators = new SQLTokenGenerators();
         generators.addAll(Collections.singleton(generator));
-        Collection<SQLToken> actualSQLTokens = generators.generateSQLTokens(
-                "sharding_db", Collections.singletonMap("test", 
mock(ShardingSphereSchema.class)), mock(SQLStatementContext.class), 
Collections.emptyList(), mock(ConnectionContext.class));
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+        when(database.getName()).thenReturn("sharding_db");
+        Collection<SQLToken> actualSQLTokens = 
generators.generateSQLTokens(database, mock(SQLStatementContext.class), 
Collections.emptyList(), mock(ConnectionContext.class));
         assertThat(actualSQLTokens.size(), is(2));
         assertThat(actualSQLTokens, is(expectedTokens));
     }
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
index 654955097e8..e0ebecfed5d 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
@@ -37,7 +37,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -79,21 +78,21 @@ public final class CDCSchemaTableUtils {
     }
     
     private static Map<String, Set<String>> 
parseTableExpressionWithAllTables(final ShardingSphereDatabase database, final 
Collection<String> systemSchemas) {
-        Map<String, Set<String>> result = new 
HashMap<>(database.getSchemas().size(), 1F);
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            if (!systemSchemas.contains(entry.getKey())) {
-                entry.getValue().getAllTables().forEach(each -> 
result.computeIfAbsent(entry.getKey(), ignored -> new 
HashSet<>()).add(each.getName()));
+        Map<String, Set<String>> result = new 
HashMap<>(database.getAllSchemas().size(), 1F);
+        for (ShardingSphereSchema schema : database.getAllSchemas()) {
+            if (!systemSchemas.contains(schema.getName())) {
+                schema.getAllTables().forEach(each -> 
result.computeIfAbsent(each.getName(), ignored -> new 
HashSet<>()).add(each.getName()));
             }
         }
         return result;
     }
     
     private static Map<String, Set<String>> 
parseTableExpressionWithAllSchema(final ShardingSphereDatabase database, final 
Collection<String> systemSchemas, final SchemaTable table) {
-        Map<String, Set<String>> result = new 
HashMap<>(database.getSchemas().size(), 1F);
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            if (!systemSchemas.contains(entry.getKey())) {
-                entry.getValue().getAllTables().stream().filter(each -> 
each.getName().equals(table.getTable())).findFirst()
-                        .ifPresent(optional -> 
result.computeIfAbsent(entry.getKey(), ignored -> new 
HashSet<>()).add(optional.getName()));
+        Map<String, Set<String>> result = new 
HashMap<>(database.getAllSchemas().size(), 1F);
+        for (ShardingSphereSchema schema : database.getAllSchemas()) {
+            if (!systemSchemas.contains(schema.getName())) {
+                schema.getAllTables().stream().filter(each -> 
each.getName().equals(table.getTable())).findFirst()
+                        .ifPresent(optional -> 
result.computeIfAbsent(schema.getName(), ignored -> new 
HashSet<>()).add(optional.getName()));
             }
         }
         return result;
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtilsTest.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtilsTest.java
index f93435dd978..9799e436e14 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtilsTest.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/test/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtilsTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.data.pipeline.cdc.util;
 
 import 
org.apache.shardingsphere.data.pipeline.cdc.protocol.request.StreamDataRequestBody.SchemaTable;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -70,7 +69,7 @@ class CDCSchemaTableUtilsTest {
         when(table1.getName()).thenReturn("t_order");
         ShardingSphereTable table2 = mock(ShardingSphereTable.class);
         when(table2.getName()).thenReturn("t_order2");
-        return new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, 
Arrays.asList(table1, table2), Collections.emptyList());
+        return new ShardingSphereSchema("public", Arrays.asList(table1, 
table2), Collections.emptyList());
     }
     
     private ShardingSphereSchema mockedTestSchema() {
@@ -78,7 +77,7 @@ class CDCSchemaTableUtilsTest {
         when(table1.getName()).thenReturn("t_order_item");
         ShardingSphereTable table2 = mock(ShardingSphereTable.class);
         when(table2.getName()).thenReturn("t_order_item2");
-        return new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, 
Arrays.asList(table1, table2), Collections.emptyList());
+        return new ShardingSphereSchema("test", Arrays.asList(table1, table2), 
Collections.emptyList());
     }
     
     @Test
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 7736249fdaf..49dd77ff782 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -149,10 +149,10 @@ public final class MetaDataPersistService {
      * @param currentDatabase current database
      */
     public void persistReloadDatabaseByAlter(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
-        Map<String, ShardingSphereSchema> toBeDeletedSchemas = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        toBeAddedSchemas.forEach((key, value) -> 
databaseMetaDataFacade.getSchema().alterByRuleAltered(databaseName, value));
-        toBeDeletedSchemas.forEach((key, value) -> 
databaseMetaDataFacade.getTable().drop(databaseName, key, 
value.getAllTables()));
+        Collection<ShardingSphereSchema> toBeDeletedSchemas = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadDatabase, 
currentDatabase);
+        Collection<ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase, 
currentDatabase);
+        toBeAddedSchemas.forEach(each -> 
databaseMetaDataFacade.getSchema().alterByRuleAltered(databaseName, each));
+        toBeDeletedSchemas.forEach(each -> 
databaseMetaDataFacade.getTable().drop(databaseName, each.getName(), 
each.getAllTables()));
     }
     
     /**
@@ -163,9 +163,9 @@ public final class MetaDataPersistService {
      * @param currentDatabase current database
      */
     public void persistReloadDatabaseByDrop(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
-        Map<String, ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        Map<String, ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas());
-        toBeAddedSchemas.forEach((key, value) -> 
databaseMetaDataFacade.getSchema().alterByRuleDropped(databaseName, value));
-        toBeAlterSchemas.forEach((key, value) -> 
databaseMetaDataFacade.getTable().drop(databaseName, key, 
value.getAllTables()));
+        Collection<ShardingSphereSchema> toBeAlterSchemas = 
GenericSchemaManager.getToBeDroppedTablesBySchemas(reloadDatabase, 
currentDatabase);
+        Collection<ShardingSphereSchema> toBeAddedSchemas = 
GenericSchemaManager.getToBeAddedTablesBySchemas(reloadDatabase, 
currentDatabase);
+        toBeAddedSchemas.forEach(each -> 
databaseMetaDataFacade.getSchema().alterByRuleDropped(databaseName, each));
+        toBeAlterSchemas.forEach(each -> 
databaseMetaDataFacade.getTable().drop(databaseName, each.getName(), 
each.getAllTables()));
     }
 }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
index fcb3bb7d1b3..c087bf9d6f3 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
@@ -48,7 +48,7 @@ class InternalMetaDataFactoryTest {
         assertThat(database.getName(), is("foo_db"));
         assertThat(database.getProtocolType(), 
is(TypedSPILoader.getService(DatabaseType.class, "MySQL")));
         assertTrue(database.getRuleMetaData().getRules().isEmpty());
-        assertTrue(database.getSchemas().isEmpty());
+        assertTrue(database.getAllSchemas().isEmpty());
     }
     
     @Test
@@ -59,7 +59,7 @@ class InternalMetaDataFactoryTest {
         assertThat(databases.get("foo_db").getName(), is("foo_db"));
         assertThat(databases.get("foo_db").getProtocolType(), 
is(TypedSPILoader.getService(DatabaseType.class, "MySQL")));
         
assertTrue(databases.get("foo_db").getRuleMetaData().getRules().isEmpty());
-        assertTrue(databases.get("foo_db").getSchemas().isEmpty());
+        assertTrue(databases.get("foo_db").getAllSchemas().isEmpty());
     }
     
     @Test
@@ -74,6 +74,6 @@ class InternalMetaDataFactoryTest {
         assertThat(databases.get("foo_db").getName(), is("foo_db"));
         assertThat(databases.get("foo_db").getProtocolType(), 
is(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")));
         
assertTrue(databases.get("foo_db").getRuleMetaData().getRules().isEmpty());
-        assertTrue(databases.get("foo_db").getSchemas().isEmpty());
+        assertTrue(databases.get("foo_db").getAllSchemas().isEmpty());
     }
 }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
index 6d3d2bd19e7..8cb2153dfd7 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistServiceTest.java
@@ -53,6 +53,7 @@ import java.util.Properties;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyCollection;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -145,23 +146,23 @@ class MetaDataPersistServiceTest {
     
     @Test
     void assertPersistReloadDatabaseByAlter() {
-        ShardingSphereSchema toBeDeletedSchema = 
mock(ShardingSphereSchema.class);
+        ShardingSphereSchema toBeDeletedSchema = new 
ShardingSphereSchema("to_be_deleted");
         ShardingSphereSchema toBeAddedSchema = new 
ShardingSphereSchema("to_be_added");
-        when(GenericSchemaManager.getToBeDroppedTablesBySchemas(any(), 
any())).thenReturn(Collections.singletonMap("to_be_deleted", 
toBeDeletedSchema));
-        when(GenericSchemaManager.getToBeAddedTablesBySchemas(any(), 
any())).thenReturn(Collections.singletonMap("to_be_added", toBeAddedSchema));
+        when(GenericSchemaManager.getToBeDroppedTablesBySchemas(any(), 
any())).thenReturn(Collections.singleton(toBeDeletedSchema));
+        when(GenericSchemaManager.getToBeAddedTablesBySchemas(any(), 
any())).thenReturn(Collections.singleton(toBeAddedSchema));
         metaDataPersistService.persistReloadDatabaseByAlter("foo_db", 
mock(ShardingSphereDatabase.class), mock(ShardingSphereDatabase.class));
         
verify(databaseMetaDataFacade.getSchema()).alterByRuleAltered("foo_db", 
toBeAddedSchema);
-        verify(databaseMetaDataFacade.getTable()).drop("foo_db", 
"to_be_deleted", Collections.emptyList());
+        verify(databaseMetaDataFacade.getTable()).drop(eq("foo_db"), 
eq("to_be_deleted"), anyCollection());
     }
     
     @Test
     void assertPersistReloadDatabaseByDrop() {
-        ShardingSphereSchema toBeDeletedSchema = 
mock(ShardingSphereSchema.class);
-        ShardingSphereSchema toBeAlterSchema = 
mock(ShardingSphereSchema.class);
-        when(GenericSchemaManager.getToBeDroppedTablesBySchemas(any(), 
any())).thenReturn(Collections.singletonMap("to_be_deleted", 
toBeDeletedSchema));
-        when(GenericSchemaManager.getToBeAddedTablesBySchemas(any(), 
any())).thenReturn(Collections.singletonMap("to_be_altered", toBeAlterSchema));
+        ShardingSphereSchema toBeDeletedSchema = new 
ShardingSphereSchema("to_be_deleted");
+        ShardingSphereSchema toBeAlterSchema = new 
ShardingSphereSchema("to_be_altered");
+        when(GenericSchemaManager.getToBeDroppedTablesBySchemas(any(), 
any())).thenReturn(Collections.singleton(toBeDeletedSchema));
+        when(GenericSchemaManager.getToBeAddedTablesBySchemas(any(), 
any())).thenReturn(Collections.singleton(toBeAlterSchema));
         metaDataPersistService.persistReloadDatabaseByDrop("foo_db", 
mock(ShardingSphereDatabase.class), mock(ShardingSphereDatabase.class));
         
verify(databaseMetaDataFacade.getSchema()).alterByRuleDropped("foo_db", 
toBeAlterSchema);
-        verify(databaseMetaDataFacade.getTable()).drop("foo_db", 
"to_be_deleted", Collections.emptyList());
+        verify(databaseMetaDataFacade.getTable()).drop(eq("foo_db"), 
eq("to_be_deleted"), anyCollection());
     }
 }
diff --git 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
index 874868fc708..06767521251 100644
--- 
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
+++ 
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
@@ -143,9 +143,7 @@ class SchemaMetaDataPersistServiceTest {
     
     @Test
     void assertAlterByRefreshByDropConfiguration() {
-        ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-        when(schema.getName()).thenReturn("foo_schema");
-        persistService.alterByRuleDropped("foo_db", schema);
+        persistService.alterByRuleDropped("foo_db", new 
ShardingSphereSchema("foo_schema"));
         verify(tableMetaDataPersistService).persist(eq("foo_db"), 
eq("foo_schema"), anyCollection());
     }
 }
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
index 950215c2da9..3c2ad1674ef 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropSchemaSupportedCheckerTest.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.single.checker.sql;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.UnknownSQLStatementContext;
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.TableType;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -64,9 +63,9 @@ class SingleDropSchemaSupportedCheckerTest {
     
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereSchema schema = new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME);
+        ShardingSphereSchema schema = new ShardingSphereSchema("foo_schema");
         schema.putTable(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), 
TableType.TABLE));
-        
when(result.getSchemas()).thenReturn(Collections.singletonMap("foo_schema", 
schema));
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
         return result;
     }
     
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
index 5d7bc256836..1755ed14e02 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/checker/sql/SingleDropTableSupportedCheckerTest.java
@@ -52,9 +52,9 @@ class SingleDropTableSupportedCheckerTest {
     
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        ShardingSphereSchema schema = new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME);
+        ShardingSphereSchema schema = new ShardingSphereSchema("foo_schema");
         schema.putTable(new ShardingSphereTable("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), 
TableType.TABLE));
-        
when(result.getSchemas()).thenReturn(Collections.singletonMap("foo_schema", 
schema));
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
         return result;
     }
     
diff --git 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
index a8f3db81cbe..1e70d9cf7ec 100644
--- 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
+++ 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
@@ -31,8 +31,6 @@ import 
org.apache.shardingsphere.sqlfederation.executor.constant.EnumerableConst
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * Statistics assemble utils.
@@ -54,7 +52,7 @@ public final class StatisticsAssembleUtils {
             assembleOpenGaussDatabaseData(result, 
metaData.getDatabases().values());
         } else if 
(EnumerableConstants.PG_TABLES.equalsIgnoreCase(table.getName())) {
             for (ShardingSphereDatabase each : 
metaData.getDatabases().values()) {
-                assembleOpenGaussTableData(result, each.getSchemas());
+                assembleOpenGaussTableData(result, each.getAllSchemas());
             }
         } else if 
(EnumerableConstants.PG_ROLES.equalsIgnoreCase(table.getName())) {
             assembleOpenGaussRoleData(result, metaData);
@@ -71,11 +69,11 @@ public final class StatisticsAssembleUtils {
         }
     }
     
-    private static void assembleOpenGaussTableData(final 
ShardingSphereTableData tableData, final Map<String, ShardingSphereSchema> 
schemas) {
-        for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
-            for (ShardingSphereTable each : entry.getValue().getAllTables()) {
+    private static void assembleOpenGaussTableData(final 
ShardingSphereTableData tableData, final Collection<ShardingSphereSchema> 
schemas) {
+        for (ShardingSphereSchema schema : schemas) {
+            for (ShardingSphereTable each : schema.getAllTables()) {
                 Object[] rows = new Object[10];
-                rows[0] = entry.getKey();
+                rows[0] = schema.getName();
                 rows[1] = each.getName();
                 tableData.getRows().add(new 
ShardingSphereRowData(Arrays.asList(rows)));
             }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
index c87ac49fc57..4a5a800648c 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
@@ -60,9 +60,8 @@ public final class OptimizerMetaDataFactory {
      */
     public static OptimizerMetaData create(final ShardingSphereDatabase 
database) {
         Map<String, Schema> schemas = new CaseInsensitiveMap<>();
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            Schema sqlFederationSchema = new 
SQLFederationSchema(entry.getKey(), entry.getValue(), 
database.getProtocolType(), DEFAULT_DATA_TYPE_FACTORY);
-            schemas.put(entry.getKey(), sqlFederationSchema);
+        for (ShardingSphereSchema each : database.getAllSchemas()) {
+            schemas.put(each.getName(), new 
SQLFederationSchema(each.getName(), each, database.getProtocolType(), 
DEFAULT_DATA_TYPE_FACTORY));
         }
         return new OptimizerMetaData(schemas);
     }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
index 19402eed7fe..0ea31dd5195 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
@@ -27,7 +27,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 
 import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * SQL federation database.
@@ -45,9 +44,9 @@ public final class SQLFederationDatabase extends 
AbstractSchema {
     }
     
     private Map<String, Schema> createSubSchemaMap(final 
ShardingSphereDatabase database, final DatabaseType protocolType, final 
JavaTypeFactory javaTypeFactory) {
-        Map<String, Schema> result = new 
CaseInsensitiveMap<>(database.getSchemas().size(), 1F);
-        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
-            result.put(entry.getKey(), new SQLFederationSchema(entry.getKey(), 
entry.getValue(), protocolType, javaTypeFactory));
+        Map<String, Schema> result = new 
CaseInsensitiveMap<>(database.getAllSchemas().size(), 1F);
+        for (ShardingSphereSchema each : database.getAllSchemas()) {
+            result.put(each.getName(), new SQLFederationSchema(each.getName(), 
each, protocolType, javaTypeFactory));
         }
         return result;
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 61c5ecb2590..7462296debb 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -96,7 +96,7 @@ public class MetaDataContextManager {
      * @param currentDatabase current database
      */
     public void dropSchemas(final String databaseName, final 
ShardingSphereDatabase reloadDatabase, final ShardingSphereDatabase 
currentDatabase) {
-        
GenericSchemaManager.getToBeDroppedSchemas(reloadDatabase.getSchemas(), 
currentDatabase.getSchemas())
+        GenericSchemaManager.getToBeDroppedSchemas(reloadDatabase, 
currentDatabase)
                 .keySet().forEach(each -> 
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName,
 each));
     }
     
@@ -118,12 +118,12 @@ public class MetaDataContextManager {
         try {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
             metaDataContexts.set(reloadedMetaDataContexts);
-            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                    .forEach((schemaName, schema) -> {
-                        if (schema.isEmpty()) {
-                            
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(database.getName(),
 schemaName);
+            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+                    .forEach(each -> {
+                        if (each.isEmpty()) {
+                            
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(database.getName(),
 each.getName());
                         }
-                        
metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(database.getName(),
 schemaName, schema.getAllTables());
+                        
metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(database.getName(),
 each.getName(), each.getAllTables());
                     });
         } catch (final SQLException ex) {
             log.error("Refresh database meta data: {} failed", 
database.getName(), ex);
@@ -140,8 +140,8 @@ public class MetaDataContextManager {
             MetaDataContexts reloadedMetaDataContexts = 
createMetaDataContexts(database);
             dropSchemas(database.getName(), 
reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), 
database);
             metaDataContexts.set(reloadedMetaDataContexts);
-            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getSchemas()
-                    .forEach((schemaName, schema) -> 
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().alterByRefresh(database.getName(),
 schema));
+            
metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+                    .forEach(each -> 
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().alterByRefresh(database.getName(),
 each));
         } catch (final SQLException ex) {
             log.error("Refresh table meta data: {} failed", 
database.getName(), ex);
         }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 99e9cd6d74d..36ac87b94a5 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -238,11 +238,11 @@ public final class MetaDataContextsFactory {
     }
     
     private static void persistMetaData(final MetaDataContexts 
metaDataContexts, final MetaDataPersistService persistService) {
-        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getSchemas().forEach((schemaName, schema) -> {
+        metaDataContexts.getMetaData().getDatabases().values().forEach(each -> 
each.getAllSchemas().forEach(schema -> {
             if (schema.isEmpty()) {
-                
persistService.getDatabaseMetaDataFacade().getSchema().add(each.getName(), 
schemaName);
+                
persistService.getDatabaseMetaDataFacade().getSchema().add(each.getName(), 
schema.getName());
             }
-            
persistService.getDatabaseMetaDataFacade().getTable().persist(each.getName(), 
schemaName, schema.getAllTables());
+            
persistService.getDatabaseMetaDataFacade().getTable().persist(each.getName(), 
schema.getName(), schema.getAllTables());
         }));
         for (Entry<String, ShardingSphereDatabaseData> databaseDataEntry : 
metaDataContexts.getStatistics().getDatabaseData().entrySet()) {
             for (Entry<String, ShardingSphereSchemaData> schemaDataEntry : 
databaseDataEntry.getValue().getSchemaData().entrySet()) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index 390c2a1d1c1..9cf95b320a9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -22,7 +22,6 @@ import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurati
 import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfigurationEmptyChecker;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.PartialRuleUpdateSupported;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
@@ -34,9 +33,7 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -110,12 +107,5 @@ public final class DatabaseRuleConfigurationManager {
         MetaDataContexts reloadMetaDataContexts = 
MetaDataContextsFactory.createByAlterRule(databaseName, false,
                 database.getRuleMetaData().getConfigurations(), 
metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
         metaDataContexts.set(reloadMetaDataContexts);
-        
metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchemas().putAll(buildShardingSphereSchemas(metaDataContexts.get().getMetaData().getDatabase(databaseName)));
-    }
-    
-    private Map<String, ShardingSphereSchema> buildShardingSphereSchemas(final 
ShardingSphereDatabase database) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(database.getSchemas().size(), 1F);
-        database.getSchemas().forEach((key, value) -> result.put(key, new 
ShardingSphereSchema(key, value.getAllTables(), value.getAllViews())));
-        return result;
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
index a6a38f29d8d..2e32f865d7a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
@@ -120,9 +120,9 @@ public final class StorageUnitManager {
     }
     
     private Map<String, ShardingSphereSchema> buildSchemas(final 
ShardingSphereDatabase originalDatabase) {
-        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(originalDatabase.getSchemas().size(), 1F);
-        originalDatabase.getSchemas().keySet().forEach(schemaName -> 
result.put(schemaName.toLowerCase(), new ShardingSphereSchema(schemaName, 
originalDatabase.getSchema(schemaName).getAllTables(),
-                
metaDataPersistService.getDatabaseMetaDataFacade().getView().load(originalDatabase.getName(),
 schemaName))));
+        Map<String, ShardingSphereSchema> result = new 
LinkedHashMap<>(originalDatabase.getAllSchemas().size(), 1F);
+        originalDatabase.getAllSchemas().forEach(each -> 
result.put(each.getName().toLowerCase(),
+                new ShardingSphereSchema(each.getName(), each.getAllTables(), 
metaDataPersistService.getDatabaseMetaDataFacade().getView().load(originalDatabase.getName(),
 each.getName()))));
         return result;
     }
     
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 3cb6770fd7d..1c05cf6d369 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -55,7 +55,6 @@ import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Optional;
 import java.util.Properties;
 
@@ -106,8 +105,8 @@ class ContextManagerTest {
         when(result.containsSchema("foo_schema")).thenReturn(true);
         ShardingSphereTable table = mock(ShardingSphereTable.class);
         when(table.getName()).thenReturn("foo_tbl");
-        ShardingSphereSchema schema = new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, Collections.singleton(table), 
Collections.emptyList());
-        when(result.getSchemas()).thenReturn(new 
HashMap<>(Collections.singletonMap("foo_schema", schema)));
+        ShardingSphereSchema schema = new ShardingSphereSchema("foo_schema", 
Collections.singleton(table), Collections.emptyList());
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
         StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
         
when(storageUnit.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
index 0e1483ebb78..a2feb1394c7 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.mode.metadata.manager;
 
 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.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
@@ -135,7 +134,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterNotExistedSchema() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         schemaMetaDataManager.alterSchema("foo_db", "bar_schema", null, 
(ShardingSphereView) null);
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
@@ -144,7 +143,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterSchemaForNothingAltered() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         schemaMetaDataManager.alterSchema("foo_db", "foo_schema", null, 
(ShardingSphereView) null);
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
@@ -153,7 +152,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterSchemaForTableAltered() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         ShardingSphereColumn toBeChangedColumn = new 
ShardingSphereColumn("foo_col", Types.VARCHAR, false, false, false, true, 
false, false);
         ShardingSphereTable toBeChangedTable = new 
ShardingSphereTable("foo_tbl", Collections.singleton(toBeChangedColumn), 
Collections.emptyList(), Collections.emptyList());
@@ -166,7 +165,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterSchemaForViewAltered() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         ShardingSphereView toBeChangedView = new 
ShardingSphereView("foo_view", "select `foo_view`.`foo_view`.`id` AS `id` from 
`foo_view`.`foo_view`");
         schemaMetaDataManager.alterSchema("foo_db", "foo_schema", null, 
toBeChangedView);
@@ -178,7 +177,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterNotExistedSchemaForTableDropped() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         schemaMetaDataManager.alterSchema("foo_db", "bar_schema", "", "");
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
@@ -187,7 +186,7 @@ class SchemaMetaDataManagerTest {
     @Test
     void assertAlterSchemaForNothingTableDropped() {
         ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 toBeAlteredSchema));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
         schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "", "");
         verify(metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
times(0)).getRules();
@@ -195,14 +194,14 @@ class SchemaMetaDataManagerTest {
     
     @Test
     void assertAlterSchemaForTableDropped() {
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 createToBeAlteredSchema()));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
         schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_tbl", 
null);
         
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsTable("foo_tbl"));
     }
     
     @Test
     void assertAlterSchemaForViewDropped() {
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_schema",
 createToBeAlteredSchema()));
+        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
         schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_view", 
null);
         
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsView("foo_view"));
     }
@@ -210,6 +209,6 @@ class SchemaMetaDataManagerTest {
     private ShardingSphereSchema createToBeAlteredSchema() {
         ShardingSphereTable beforeChangedTable = new 
ShardingSphereTable("foo_tbl", Collections.emptyList(), 
Collections.emptyList(), Collections.emptyList());
         ShardingSphereView beforeChangedView = new 
ShardingSphereView("foo_view", "");
-        return new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, 
Collections.singleton(beforeChangedTable), 
Collections.singleton(beforeChangedView));
+        return new ShardingSphereSchema("foo_schema", 
Collections.singleton(beforeChangedTable), 
Collections.singleton(beforeChangedView));
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
index e4acdfa08ad..ee2234b025f 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
@@ -180,7 +180,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     }
     
     private void afterStorageUnitsAltered(final String databaseName, final 
MetaDataContexts originalMetaDataContexts, final MetaDataContexts 
reloadMetaDataContexts) {
-        
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().values().forEach(each
 -> metaDataPersistService.getDatabaseMetaDataFacade()
+        
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getAllSchemas().forEach(each
 -> metaDataPersistService.getDatabaseMetaDataFacade()
                 
.getSchema().alterByRuleAltered(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 each));
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
                 .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
metaDataPersistService.getShardingSphereDataPersistService()
@@ -190,7 +190,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     }
     
     private void afterStorageUnitsDropped(final String databaseName, final 
MetaDataContexts originalMetaDataContexts, final MetaDataContexts 
reloadMetaDataContexts) {
-        
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().values().forEach(each
 -> metaDataPersistService.getDatabaseMetaDataFacade()
+        
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getAllSchemas().forEach(each
 -> metaDataPersistService.getDatabaseMetaDataFacade()
                 
.getSchema().alterByRuleDropped(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
 each));
         
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
                 .ifPresent(optional -> 
optional.getSchemaData().forEach((schemaName, schemaData) -> 
metaDataPersistService.getShardingSphereDataPersistService()
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index 6de859597db..3bdbbe4ab67 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -229,12 +229,12 @@ public final class 
StandaloneMetaDataManagerPersistService implements MetaDataMa
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases().putAll(changedDatabases);
         
metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
                 .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabases(),
 GlobalRuleChangedType.DATABASE_CHANGED));
-        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getSchemas()
-                .forEach((schemaName, schema) -> {
-                    if (schema.isEmpty()) {
-                        
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 schemaName);
+        
metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getAllSchemas()
+                .forEach(each -> {
+                    if (each.isEmpty()) {
+                        
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName,
 each.getName());
                     }
-                    
metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName,
 schemaName, schema.getAllTables());
+                    
metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName,
 each.getName(), each.getAllTables());
                 });
         DataSourceUnitPersistService dataSourceService = 
metaDataPersistService.getDataSourceUnitService();
         metaDataPersistService.getMetaDataVersionPersistService()
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/response/header/query/MySQLQueryHeaderBuilderTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/response/header/query/MySQLQueryHeaderBuilderTest.java
index 668269e53d0..ef92f8a15aa 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/response/header/query/MySQLQueryHeaderBuilderTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/response/header/query/MySQLQueryHeaderBuilderTest.java
@@ -77,7 +77,7 @@ class MySQLQueryHeaderBuilderTest {
     @Test
     void assertBuildWithNullSchema() throws SQLException {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getSchemas()).thenReturn(Collections.emptyMap());
+        when(database.getAllSchemas()).thenReturn(Collections.emptyList());
         DataNodeRuleAttribute ruleAttribute = 
mock(DataNodeRuleAttribute.class);
         
when(ruleAttribute.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_order"));
         
when(database.getRuleMetaData().getAttributes(DataNodeRuleAttribute.class)).thenReturn(Collections.singleton(ruleAttribute));
diff --git 
a/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
 
b/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
index 30327ee5d77..8b89ad219fa 100644
--- 
a/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
+++ 
b/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.proxy.backend.opengauss.handler.admin;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 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.execute.result.query.QueryResultMetaData;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
@@ -86,7 +85,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         
when(connectionSession.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "openGauss"));
         ConnectionContext connectionContext = mockConnectionContext();
         
when(connectionSession.getConnectionContext()).thenReturn(connectionContext);
-        Map<String, ShardingSphereDatabase> databases = 
createShardingSphereDatabaseMap();
+        Map<String, ShardingSphereDatabase> databases = createDatabases();
         SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
SQLFederationRuleConfiguration(false, false, new CacheOption(1, 1L)), 
databases);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(mock(RuleMetaData.class));
         OpenGaussSelectStatement sqlStatement = 
createSelectStatementForPgDatabase();
@@ -118,7 +117,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         return result;
     }
     
-    private Map<String, ShardingSphereDatabase> 
createShardingSphereDatabaseMap() {
+    private Map<String, ShardingSphereDatabase> createDatabases() {
         Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(1, 
1F);
         Collection<ShardingSphereColumn> columns = Arrays.asList(
                 new ShardingSphereColumn("datname", 12, false, false, false, 
true, false, false),
@@ -136,7 +135,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
                 new ShardingSphereColumn("datacl", 2003, false, false, false, 
true, false, false),
                 new ShardingSphereColumn("datfrozenxid64", 1111, false, false, 
false, true, false, false),
                 new ShardingSphereColumn("datminmxid", 1111, false, false, 
false, true, false, false));
-        ShardingSphereSchema schema = new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME,
+        ShardingSphereSchema schema = new ShardingSphereSchema("pg_catalog",
                 Collections.singleton(new ShardingSphereTable("pg_database", 
columns, Collections.emptyList(), Collections.emptyList())), 
Collections.emptyList());
         result.put("sharding_db", new ShardingSphereDatabase("sharding_db", 
TypedSPILoader.getService(DatabaseType.class, "openGauss"),
                 mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), 
mock(RuleMetaData.class), Collections.singletonMap("pg_catalog", schema)));
@@ -150,7 +149,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(ruleMetaData);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(props);
-        Map<String, ShardingSphereDatabase> databases = 
createShardingSphereDatabaseMap();
+        Map<String, ShardingSphereDatabase> databases = createDatabases();
         SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
SQLFederationRuleConfiguration(false, false, new CacheOption(1, 1L)), 
databases);
         OpenGaussSelectStatement sqlStatement = 
createSelectStatementForVersion();
         ShardingSphereMetaData metaData =
@@ -186,7 +185,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(ruleMetaData);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(props);
-        Map<String, ShardingSphereDatabase> databases = 
createShardingSphereDatabaseMap();
+        Map<String, ShardingSphereDatabase> databases = createDatabases();
         SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
SQLFederationRuleConfiguration(false, false, new CacheOption(1, 1L)), 
databases);
         OpenGaussSelectStatement sqlStatement = 
createSelectStatementForGsPasswordDeadlineAndIntervalToNum();
         ShardingSphereMetaData metaData =
@@ -224,7 +223,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(ruleMetaData);
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(props);
-        Map<String, ShardingSphereDatabase> databases = 
createShardingSphereDatabaseMap();
+        Map<String, ShardingSphereDatabase> databases = createDatabases();
         SQLFederationRule sqlFederationRule = new SQLFederationRule(new 
SQLFederationRuleConfiguration(false, false, new CacheOption(1, 1L)), 
databases);
         OpenGaussSelectStatement sqlStatement = 
createSelectStatementForGsPasswordNotifyTime();
         ShardingSphereMetaData metaData =
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/EncryptSQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/EncryptSQLRewriterIT.java
index c26e709edd6..00b7b46bb12 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/EncryptSQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/EncryptSQLRewriterIT.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.test.it.rewrite.engine.scenario;
 
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
@@ -96,7 +95,7 @@ class EncryptSQLRewriterIT extends SQLRewriterIT {
                 new ShardingSphereColumn("email", Types.VARCHAR, false, false, 
false, true, false, false),
                 new ShardingSphereColumn("telephone", Types.VARCHAR, false, 
false, false, true, false, false),
                 new ShardingSphereColumn("creation_date", Types.DATE, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, tables, 
Collections.emptyList()));
+        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(schemaName, tables, Collections.emptyList()));
     }
     
     @Override
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/MixSQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/MixSQLRewriterIT.java
index ee9562b969b..58b64d16506 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/MixSQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/MixSQLRewriterIT.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.test.it.rewrite.engine.scenario;
 
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -70,7 +69,7 @@ class MixSQLRewriterIT extends SQLRewriterIT {
                 new ShardingSphereColumn("password", Types.VARCHAR, false, 
false, false, true, false, false),
                 new ShardingSphereColumn("amount", Types.DECIMAL, false, 
false, false, true, false, false),
                 new ShardingSphereColumn("status", Types.TINYINT, false, 
false, false, false, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, tables, 
Collections.emptyList()));
+        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(schemaName, tables, Collections.emptyList()));
     }
     
     @Override
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
index e2e7e938b1b..482a4e27ef0 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/scenario/ShardingSQLRewriterIT.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.test.it.rewrite.engine.scenario;
 
-import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -104,7 +103,7 @@ class ShardingSQLRewriterIT extends SQLRewriterIT {
         tables.add(new ShardingSphereTable("t_account_view", Arrays.asList(
                 new ShardingSphereColumn("id", Types.INTEGER, false, false, 
false, true, false, false),
                 new ShardingSphereColumn("account_id", Types.INTEGER, false, 
false, false, true, false, false)), Collections.emptyList(), 
Collections.emptyList()));
-        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(DefaultDatabase.LOGIC_NAME, tables, 
Collections.emptyList()));
+        return Collections.singletonMap(schemaName, new 
ShardingSphereSchema(schemaName, tables, Collections.emptyList()));
     }
     
     @Override

Reply via email to