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

panjuan 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 3a8bfc1a4e4 Add DatabaseTypeRegistry (#27568)
3a8bfc1a4e4 is described below

commit 3a8bfc1a4e48eef665d30676183ffaae946050a1
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 30 14:47:35 2023 +0800

    Add DatabaseTypeRegistry (#27568)
---
 .../encrypt/merge/dql/EncryptMergedResult.java     |  5 ++-
 .../rewrite/condition/EncryptConditionEngine.java  |  4 +--
 .../EncryptAssignmentParameterRewriter.java        |  4 +--
 ...OnDuplicateKeyUpdateValueParameterRewriter.java |  4 +--
 .../EncryptInsertValueParameterRewriter.java       |  4 +--
 .../EncryptPredicateParameterRewriter.java         |  4 +--
 .../generator/EncryptAssignmentTokenGenerator.java |  4 +--
 .../EncryptOrderByItemTokenGenerator.java          |  4 +--
 .../EncryptPredicateColumnTokenGenerator.java      |  4 +--
 .../EncryptPredicateRightValueTokenGenerator.java  |  4 +--
 .../generator/EncryptProjectionTokenGenerator.java |  4 +--
 .../EncryptInsertOnUpdateTokenGenerator.java       |  4 +--
 .../insert/EncryptInsertValuesTokenGenerator.java  |  6 ++--
 .../mask/merge/dql/MaskAlgorithmMetaData.java      |  4 +--
 .../merge/dal/ShardingDALResultMerger.java         |  5 +--
 .../merge/ddl/ShardingDDLResultMerger.java         |  4 +--
 .../merge/dql/ShardingDQLResultMerger.java         |  4 +--
 .../token/generator/impl/IndexTokenGenerator.java  |  4 +--
 .../InsertClauseShardingConditionEngine.java       |  4 +--
 .../engine/WhereClauseShardingConditionEngine.java |  4 +--
 .../impl/ShardingAlterIndexStatementValidator.java |  4 +--
 .../ShardingCreateFunctionStatementValidator.java  |  4 +--
 .../ShardingCreateIndexStatementValidator.java     |  4 +--
 .../ShardingCreateProcedureStatementValidator.java |  4 +--
 .../ShardingCreateTableStatementValidator.java     |  4 +--
 .../impl/ShardingDropIndexStatementValidator.java  |  6 ++--
 .../impl/ShardingDropTableStatementValidator.java  |  4 +--
 .../shardingsphere/sharding/rule/ShardingRule.java |  4 +--
 .../select/projection/engine/ProjectionEngine.java |  4 +--
 .../statement/dml/InsertStatementContext.java      |  4 +--
 .../from/impl/SimpleTableSegmentBinder.java        |  4 +--
 .../metadata/database/ShardingSphereDatabase.java  |  4 +--
 .../schema/builder/GenericSchemaBuilder.java       |  6 ++--
 .../database/schema/util/IndexMetaDataUtils.java   |  4 +--
 .../refresher/MetaDataRefreshEngine.java           |  4 +--
 .../ShardingSphereMetaDataValidateUtils.java       |  4 +--
 .../database/core/type/DatabaseTypeFactory.java    | 24 --------------
 ...eTypeFactory.java => DatabaseTypeRegistry.java} | 37 ++++------------------
 .../core/type/DatabaseTypeFactoryTest.java         | 29 -----------------
 ...toryTest.java => DatabaseTypeRegistryTest.java} | 29 +++--------------
 .../driver/executor/DriverExecutor.java            |  4 +--
 ...RC32MatchDataConsistencyCalculateAlgorithm.java |  4 +--
 .../shardingsphere/single/rule/SingleRule.java     |  4 +--
 .../update/LoadSingleTableStatementUpdater.java    |  4 +--
 .../update/UnloadSingleTableStatementUpdater.java  |  4 +--
 .../proxy/backend/connector/ProxySQLExecutor.java  |  4 +--
 .../ral/queryable/ShowTableMetaDataExecutor.java   |  4 +--
 .../ral/updatable/RefreshTableMetaDataUpdater.java |  6 ++--
 .../handler/distsql/rul/sql/PreviewExecutor.java   |  4 +--
 .../prepare/MySQLComStmtPrepareExecutor.java       |  4 +--
 .../describe/PostgreSQLComDescribeExecutor.java    |  4 +--
 .../test/it/rewrite/engine/SQLRewriterIT.java      |  5 ++-
 52 files changed, 112 insertions(+), 210 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
index 36449a8fb2d..369ab55d7e6 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 
@@ -61,8 +61,7 @@ public final class EncryptMergedResult implements 
MergedResult {
             return mergedResult.getValue(columnIndex, type);
         }
         TablesContext tablesContext = 
selectStatementContext.getTablesContext();
-        String schemaName = tablesContext.getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 database.getName()));
+        String schemaName = tablesContext.getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(selectStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
         ColumnProjection originalColumn = new 
ColumnProjection(columnProjection.get().getOriginalOwner(), 
columnProjection.get().getOriginalName(), null, 
selectStatementContext.getDatabaseType());
         Map<String, String> expressionTableNames = 
tablesContext.findTableNamesByColumnProjection(Collections.singletonList(originalColumn),
 database.getSchema(schemaName));
         Optional<String> tableName = findTableName(originalColumn, 
expressionTableNames);
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 dfa37eb4599..664d36dd162 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
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptInConditi
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
@@ -91,7 +91,7 @@ public final class EncryptConditionEngine {
     public Collection<EncryptCondition> createEncryptConditions(final 
Collection<WhereSegment> whereSegments, final Collection<ColumnSegment> 
columnSegments,
                                                                 final 
SQLStatementContext sqlStatementContext, final String databaseName) {
         Collection<EncryptCondition> result = new LinkedList<>();
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName);
+        String defaultSchema = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
         Map<String, String> expressionTableNames = 
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
 schema);
         for (WhereSegment each : whereSegments) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
index 0df2082f673..763072b441a 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
@@ -27,7 +27,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.GroupedParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder;
@@ -70,7 +70,7 @@ public final class EncryptAssignmentParameterRewriter 
implements ParameterRewrit
     @Override
     public void rewrite(final ParameterBuilder paramBuilder, final 
SQLStatementContext sqlStatementContext, final List<Object> params) {
         String tableName = ((TableAvailable) 
sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (AssignmentSegment each : 
getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments())
 {
             String columnName = 
each.getColumns().get(0).getIdentifier().getValue();
             if (each.getValue() instanceof ParameterMarkerExpressionSegment && 
encryptRule.findEncryptTable(tableName).map(optional -> 
optional.isEncryptColumn(columnName)).orElse(false)) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
index a9c826bc4dd..7c285330464 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.OnDuplicateUpdateContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.GroupedParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
@@ -58,7 +58,7 @@ public final class 
EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter imple
         String tableName = 
insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         GroupedParameterBuilder groupedParamBuilder = 
(GroupedParameterBuilder) paramBuilder;
         OnDuplicateUpdateContext onDuplicateKeyUpdateValueContext = 
insertStatementContext.getOnDuplicateKeyUpdateValueContext();
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (int index = 0; index < 
onDuplicateKeyUpdateValueContext.getValueExpressions().size(); index++) {
             String logicColumnName = 
onDuplicateKeyUpdateValueContext.getColumn(index).getIdentifier().getValue();
             if (!encryptRule.findEncryptTable(tableName).map(optional -> 
optional.isEncryptColumn(logicColumnName)).orElse(false)) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
index 7088a337c4e..743eb842dd3 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
@@ -25,7 +25,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.GroupedParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder;
@@ -67,7 +67,7 @@ public final class EncryptInsertValueParameterRewriter 
implements ParameterRewri
         }
         Iterator<String> descendingColumnNames = 
insertStatementContext.getDescendingColumnNames();
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         while (descendingColumnNames.hasNext()) {
             String columnName = descendingColumnNames.next();
             if (encryptRule.findEncryptTable(tableName).map(optional -> 
optional.isEncryptColumn(columnName)).orElse(false)) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
index 262e1a4850d..49c80e9d6cb 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
@@ -28,7 +28,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
@@ -57,7 +57,7 @@ public final class EncryptPredicateParameterRewriter 
implements ParameterRewrite
     
     @Override
     public void rewrite(final ParameterBuilder paramBuilder, final 
SQLStatementContext sqlStatementContext, final List<Object> params) {
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (EncryptCondition each : encryptConditions) {
             encryptParameters(paramBuilder, each.getPositionIndexMap(), 
getEncryptedValues(schemaName, each, each.getValues(params)));
         }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
index 900c817c6eb..5cb725c2cfe 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
@@ -31,7 +31,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
@@ -69,7 +69,7 @@ public final class EncryptAssignmentTokenGenerator implements 
CollectionSQLToken
         Collection<SQLToken> result = new LinkedList<>();
         String tableName = ((TableAvailable) 
sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
         EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (AssignmentSegment each : 
getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments())
 {
             String columnName = 
each.getColumns().get(0).getIdentifier().getValue();
             if (encryptTable.isEncryptColumn(columnName)) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
index 42ad3635142..3d72c17c319 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
@@ -30,7 +30,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.SchemaMetaDataAware;
@@ -69,7 +69,7 @@ public final class EncryptOrderByItemTokenGenerator 
implements CollectionSQLToke
     @Override
     public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
         Collection<SQLToken> result = new LinkedHashSet<>();
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName);
+        String defaultSchema = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
         for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
             if (each.getSegment() instanceof ColumnOrderByItemSegment) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
index 5b1fd060ba2..583ecd05db7 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
@@ -30,7 +30,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.SchemaMetaDataAware;
@@ -78,7 +78,7 @@ public final class EncryptPredicateColumnTokenGenerator 
implements CollectionSQL
             columnSegments = ((WhereAvailable) 
sqlStatementContext).getColumnSegments();
             whereSegments = ((WhereAvailable) 
sqlStatementContext).getWhereSegments();
         }
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName);
+        String defaultSchema = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
         Map<String, String> columnExpressionTableNames = 
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
 schema);
         return generateSQLTokens(columnSegments, columnExpressionTableNames, 
whereSegments);
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
index 68b69005d78..eeaa4b6fc79 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
@@ -34,7 +34,7 @@ import 
org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import org.apache.shardingsphere.encrypt.rule.column.item.LikeQueryColumnItem;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.ParametersAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
@@ -70,7 +70,7 @@ public final class EncryptPredicateRightValueTokenGenerator 
implements Collectio
     @Override
     public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
         Collection<SQLToken> result = new LinkedHashSet<>();
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (EncryptCondition each : encryptConditions) {
             
encryptRule.findEncryptTable(each.getTableName()).ifPresent(optional -> 
result.add(generateSQLToken(schemaName, optional, each)));
         }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index 2b6c6d6eaad..c7a8cdfb3ea 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -34,7 +34,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.PreviousSQLTokensAware;
@@ -167,7 +167,7 @@ public final class EncryptProjectionTokenGenerator 
implements CollectionSQLToken
                 columns.addAll(((ShorthandProjection) 
projection).getColumnProjections());
             }
         }
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 databaseName);
+        String defaultSchema = new 
DatabaseTypeRegistry(selectStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         ShardingSphereSchema schema = 
selectStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
         return 
selectStatementContext.getTablesContext().findTableNamesByColumnProjection(columns,
 schema);
     }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
index d9e9767a262..23731d8c0fa 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
@@ -33,7 +33,7 @@ import 
org.apache.shardingsphere.encrypt.rule.column.item.AssistedQueryColumnIte
 import org.apache.shardingsphere.encrypt.rule.column.item.LikeQueryColumnItem;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
@@ -75,7 +75,7 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
             return Collections.emptyList();
         }
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         String tableName = 
insertStatement.getTable().getTableName().getIdentifier().getValue();
         EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         Collection<SQLToken> result = new LinkedList<>();
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
index 4121beb7a37..93d9fe050ca 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
@@ -33,7 +33,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.expr
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.expression.DerivedSimpleExpressionSegment;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.OptionalSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.PreviousSQLTokensAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
@@ -91,7 +91,7 @@ public final class EncryptInsertValuesTokenGenerator 
implements OptionalSQLToken
         EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         int count = 0;
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (InsertValueContext each : 
insertStatementContext.getInsertValueContexts()) {
             encryptToken(insertValuesToken.getInsertValues().get(count), 
schemaName, encryptTable, insertStatementContext, each);
             count++;
@@ -104,7 +104,7 @@ public final class EncryptInsertValuesTokenGenerator 
implements OptionalSQLToken
         InsertValuesToken result = new 
EncryptInsertValuesToken(getStartIndex(insertValuesSegments), 
getStopIndex(insertValuesSegments));
         EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName));
         for (InsertValueContext each : 
insertStatementContext.getInsertValueContexts()) {
             InsertValue insertValueToken = new 
InsertValue(each.getValueExpressions());
             encryptToken(insertValueToken, schemaName, encryptTable, 
insertStatementContext, each);
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
index a5ea0a8c97e..0a4da833854 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
@@ -22,7 +22,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mask.rule.MaskRule;
 import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
@@ -57,7 +57,7 @@ public final class MaskAlgorithmMetaData {
             return Optional.empty();
         }
         TablesContext tablesContext = 
selectStatementContext.getTablesContext();
-        String schemaName = tablesContext.getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 database.getName()));
+        String schemaName = tablesContext.getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(selectStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
         Map<String, String> expressionTableNames = 
tablesContext.findTableNamesByColumnProjection(
                 Collections.singletonList(columnProjection.get()), 
database.getSchema(schemaName));
         return findTableName(columnProjection.get(), 
expressionTableNames).flatMap(optional -> maskRule.findMaskAlgorithm(optional, 
columnProjection.get().getName().getValue()));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
index d7d2d840448..ba76f7f932c 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dal/ShardingDALResultMerger.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sharding.merge.dal;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.engine.merger.ResultMerger;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
@@ -62,7 +62,8 @@ public final class ShardingDALResultMerger implements 
ResultMerger {
         if (dalStatement instanceof MySQLShowDatabasesStatement) {
             return new LocalDataMergedResult(Collections.singleton(new 
LocalDataQueryResultRow(databaseName)));
         }
-        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName()));
+        String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName()
+                .orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName()));
         ShardingSphereSchema schema = database.getSchema(schemaName);
         if (dalStatement instanceof MySQLShowTablesStatement) {
             return new LogicTablesMergedResult(shardingRule, 
sqlStatementContext, schema, queryResults);
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
index d1c9d90d9a9..5d0a8c33f72 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMerger.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sharding.merge.ddl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.FetchStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.engine.merger.ResultMerger;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
@@ -57,7 +57,7 @@ public final class ShardingDDLResultMerger implements 
ResultMerger {
     }
     
     private ShardingSphereSchema getSchema(final SQLStatementContext 
sqlStatementContext, final ShardingSphereDatabase database) {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         return 
sqlStatementContext.getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
 -> database.getSchema(defaultSchemaName));
     }
     
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMerger.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMerger.java
index b005c1078f7..267ee401c6e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMerger.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMerger.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatem
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.merge.engine.merger.ResultMerger;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
@@ -82,7 +82,7 @@ public final class ShardingDQLResultMerger implements 
ResultMerger {
     
     private MergedResult build(final List<QueryResult> queryResults, final 
SelectStatementContext selectStatementContext,
                                final Map<String, Integer> columnLabelIndexMap, 
final ShardingSphereDatabase database) throws SQLException {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(selectStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
selectStatementContext.getTablesContext().getSchemaName()
                 .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         if (isNeedProcessGroupBy(selectStatementContext)) {
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/IndexTokenGenerator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/IndexTokenGenerator.java
index 907648be0b7..52f752eb5bf 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/IndexTokenGenerator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/IndexTokenGenerator.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl;
 import lombok.Setter;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.SchemaMetaDataAware;
@@ -54,7 +54,7 @@ public final class IndexTokenGenerator implements 
CollectionSQLTokenGenerator<SQ
     @Override
     public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
         Collection<SQLToken> result = new LinkedList<>();
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName);
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         if (sqlStatementContext instanceof IndexAvailable) {
             for (IndexSegment each : ((IndexAvailable) 
sqlStatementContext).getIndexes()) {
                 ShardingSphereSchema schema = each.getOwner().isPresent() ? 
schemas.get(each.getOwner().get().getIdentifier().getValue()) : 
schemas.get(defaultSchemaName);
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
index 7e26f29af95..be990e97829 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.Gene
 import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.InsertValueContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+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.util.exception.ShardingSpherePreconditions;
@@ -91,7 +91,7 @@ public final class InsertClauseShardingConditionEngine {
     }
     
     private void appendMissingShardingConditions(final InsertStatementContext 
sqlStatementContext, final Collection<String> columnNames, final 
List<ShardingCondition> shardingConditions) {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
 -> database.getSchema(defaultSchemaName));
         String tableName = 
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         
ShardingSpherePreconditions.checkState(schema.containsTable(tableName), () -> 
new NoSuchTableException(tableName));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
index 563db3afa6b..96e0b56915b 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
@@ -21,7 +21,7 @@ import com.google.common.collect.Range;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+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.sharding.exception.data.ShardingValueDataTypeException;
@@ -79,7 +79,7 @@ public final class WhereClauseShardingConditionEngine {
             return Collections.emptyList();
         }
         Collection<ColumnSegment> columnSegments = ((WhereAvailable) 
sqlStatementContext).getColumnSegments();
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName()
                 .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         Map<String, String> columnExpressionTableNames = 
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
 schema);
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterIndexStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterIndexStatementValidator.java
index 96a9404a340..c2aaaf69835 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterIndexStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingAlterIndexStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -45,7 +45,7 @@ public final class ShardingAlterIndexStatementValidator 
extends ShardingDDLState
                             final List<Object> params, final 
ShardingSphereDatabase database, final ConfigurationProperties props) {
         AlterIndexStatement alterIndexStatement = (AlterIndexStatement) 
sqlStatementContext.getSqlStatement();
         Optional<IndexSegment> index = alterIndexStatement.getIndex();
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = index.flatMap(optional -> 
optional.getOwner()
                 .map(owner -> 
database.getSchema(owner.getIdentifier().getValue()))).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         if (index.isPresent() && !isSchemaContainsIndex(schema, index.get())) {
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateFunctionStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateFunctionStatementValidator.java
index 8f5d126f955..f13f34145da 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateFunctionStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateFunctionStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -52,7 +52,7 @@ public final class ShardingCreateFunctionStatementValidator 
extends ShardingDDLS
         TableExtractor extractor = new TableExtractor();
         Collection<SimpleTableSegment> existTables = 
extractor.extractExistTableFromRoutineBody(routineBodySegment.get());
         validateShardingTable(shardingRule, "CREATE FUNCTION", existTables);
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
createFunctionStatement.getFunctionName().flatMap(optional -> 
optional.getOwner()
                 .map(owner -> 
database.getSchema(owner.getIdentifier().getValue()))).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         validateTableExist(schema, existTables);
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
index 770ada5f2ce..6822bbc1aff 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateIndexStatementValidator.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -46,7 +46,7 @@ public final class ShardingCreateIndexStatementValidator 
extends ShardingDDLStat
             return;
         }
         CreateIndexStatement createIndexStatement = (CreateIndexStatement) 
sqlStatementContext.getSqlStatement();
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName()
                 .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         validateTableExist(schema, 
Collections.singleton(createIndexStatement.getTable()));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateProcedureStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateProcedureStatementValidator.java
index b8e223e213a..db3e9cd08a8 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateProcedureStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateProcedureStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -50,7 +50,7 @@ public final class ShardingCreateProcedureStatementValidator 
extends ShardingDDL
             return;
         }
         TableExtractor extractor = new TableExtractor();
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
createProcedureStatement.getProcedureName().flatMap(optional -> 
optional.getOwner()
                 .map(owner -> 
database.getSchema(owner.getIdentifier().getValue()))).orElseGet(() -> 
database.getSchema(defaultSchemaName));
         Collection<SimpleTableSegment> existTables = 
extractor.extractExistTableFromRoutineBody(routineBodySegment.get());
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
index 5ce91a9120e..bc469158134 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingCreateTableStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -43,7 +43,7 @@ public final class ShardingCreateTableStatementValidator 
extends ShardingDDLStat
                             final List<Object> params, final 
ShardingSphereDatabase database, final ConfigurationProperties props) {
         CreateTableStatement createTableStatement = (CreateTableStatement) 
sqlStatementContext.getSqlStatement();
         if (!CreateTableStatementHandler.ifNotExists(createTableStatement)) {
-            String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+            String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
             ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName()
                     .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
             validateTableNotExist(schema, 
Collections.singleton(createTableStatement.getTable()));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
index 5c67ca83432..a42fbcfd528 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropIndexStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -49,7 +49,7 @@ public final class ShardingDropIndexStatementValidator 
extends ShardingDDLStatem
         if (DropIndexStatementHandler.ifExists(dropIndexStatement)) {
             return;
         }
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         for (IndexSegment each : dropIndexStatement.getIndexes()) {
             ShardingSphereSchema schema = each.getOwner().map(optional -> 
optional.getIdentifier().getValue())
                     .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
@@ -68,7 +68,7 @@ public final class ShardingDropIndexStatementValidator 
extends ShardingDDLStatem
         if (logicTableName.isPresent()) {
             validateDropIndexRouteUnit(shardingRule, routeContext, 
indexSegments, logicTableName.get());
         } else {
-            String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+            String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
             for (IndexSegment each : indexSegments) {
                 ShardingSphereSchema schema = each.getOwner().map(optional -> 
optional.getIdentifier().getValue())
                         .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
index 03b0cfc1232..daddee3f9fa 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.sharding.route.engine.validator.ddl.impl;
 
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -51,7 +51,7 @@ public final class ShardingDropTableStatementValidator 
extends ShardingDDLStatem
                             final List<Object> params, final 
ShardingSphereDatabase database, final ConfigurationProperties props) {
         DropTableStatement dropTableStatement = (DropTableStatement) 
sqlStatementContext.getSqlStatement();
         if (!DropTableStatementHandler.ifExists(dropTableStatement)) {
-            String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+            String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
             ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName()
                     .map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchemaName));
             validateTableExist(schema, 
sqlStatementContext.getTablesContext().getSimpleTableSegments());
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index e5bfae31b57..f4b64df15da 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -23,7 +23,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -470,7 +470,7 @@ public final class ShardingRule implements DatabaseRule, 
DataNodeContainedRule,
         if (!isAllBindingTables(logicTableNames)) {
             return false;
         }
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
 -> database.getSchema(defaultSchemaName));
         SelectStatementContext select = (SelectStatementContext) 
sqlStatementContext;
         return isJoinConditionContainsShardingColumns(schema, select, 
logicTableNames, select.getWhereSegments());
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
index 641789f20cb..1a219151798 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionEngine.java
@@ -30,7 +30,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.exception.SchemaNotFoundException;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -173,7 +173,7 @@ public final class ProjectionEngine {
         String tableName = ((SimpleTableSegment) 
table).getTableName().getIdentifier().getValue();
         String tableAlias = table.getAliasName().orElse(tableName);
         String schemaName = ((SimpleTableSegment) 
table).getOwner().map(optional -> optional.getIdentifier().getValue())
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(databaseType, 
databaseName)).toLowerCase();
+                .orElseGet(() -> new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(databaseName)).toLowerCase();
         ShardingSphereSchema schema = schemas.get(schemaName);
         ShardingSpherePreconditions.checkNotNull(schema, () -> new 
SchemaNotFoundException(schemaName));
         Collection<ColumnProjection> result = new LinkedList<>();
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
index f0348466699..8c1439785a7 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
@@ -29,7 +29,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.insert.values.OnDu
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -102,7 +102,7 @@ public final class InsertStatementContext extends 
CommonSQLStatementContext impl
         ShardingSpherePreconditions.checkNotNull(databaseName, 
NoDatabaseSelectedException::new);
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         ShardingSpherePreconditions.checkNotNull(database, () -> new 
UnknownDatabaseException(databaseName));
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(getDatabaseType(), databaseName);
+        String defaultSchema = new 
DatabaseTypeRegistry(getDatabaseType()).getDefaultSchemaName(databaseName);
         return 
tablesContext.getSchemaName().map(database::getSchema).orElseGet(() -> 
database.getSchema(defaultSchema));
     }
     
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
index a79bc270e61..4cf9be63333 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.binder.segment.from.TableSegmentBinderCon
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.database.opengauss.type.OpenGaussDatabaseType;
 import 
org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDatabaseType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -98,7 +98,7 @@ public final class SimpleTableSegmentBinder {
                 && 
SYSTEM_CATALOG_TABLES.contains(segment.getTableName().getIdentifier().getValue().toLowerCase()))
 {
             return new IdentifierValue(PG_CATALOG);
         }
-        return new 
IdentifierValue(DatabaseTypeFactory.getDefaultSchemaName(databaseType, 
defaultDatabaseName));
+        return new IdentifierValue(new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(defaultDatabaseName));
     }
     
     private static TableSegmentBinderContext 
createSimpleTableBinderContext(final SimpleTableSegment segment, final 
ShardingSphereSchema schema,
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 3cdc5c31c1f..d929a730266 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
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDa
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
 import org.apache.shardingsphere.infra.datasource.storage.StorageResource;
@@ -88,7 +88,7 @@ public final class ShardingSphereDatabase {
         Collection<ShardingSphereRule> databaseRules = 
DatabaseRulesBuilder.build(name, databaseConfig, instanceContext);
         Map<String, ShardingSphereSchema> schemas = new 
ConcurrentHashMap<>(GenericSchemaBuilder
                 .build(new GenericSchemaBuilderMaterial(protocolType, 
storageTypes, 
DataSourceStateManager.getInstance().getEnabledDataSourceMap(name, 
databaseConfig.getDataSources()), databaseRules,
-                        props, 
DatabaseTypeFactory.getDefaultSchemaName(protocolType, name))));
+                        props, new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
         SystemSchemaBuilder.build(name, protocolType, 
props).forEach(schemas::putIfAbsent);
         return create(name, protocolType, databaseConfig, databaseRules, 
schemas);
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index 60330968dea..02acc209b52 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMe
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereConstraint;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
@@ -108,10 +108,10 @@ public final class GenericSchemaBuilder {
     private static Map<String, SchemaMetaData> translate(final Map<String, 
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterial material) 
{
         Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
         for (DatabaseType each : material.getStorageTypes().values()) {
-            String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(each, material.getDefaultSchemaName());
+            String defaultSchemaName = new 
DatabaseTypeRegistry(each).getDefaultSchemaName(material.getDefaultSchemaName());
             
tableMetaDataList.addAll(Optional.ofNullable(schemaMetaDataMap.get(defaultSchemaName)).map(SchemaMetaData::getTables).orElseGet(Collections::emptyList));
         }
-        String frontendSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(material.getProtocolType(), 
material.getDefaultSchemaName());
+        String frontendSchemaName = new 
DatabaseTypeRegistry(material.getProtocolType()).getDefaultSchemaName(material.getDefaultSchemaName());
         Map<String, SchemaMetaData> result = new LinkedHashMap<>();
         result.put(frontendSchemaName, new SchemaMetaData(frontendSchemaName, 
tableMetaDataList));
         return result;
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
index 0cc44839925..7aa7afc99e3 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
@@ -21,7 +21,7 @@ import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+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.QualifiedTable;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -89,7 +89,7 @@ public final class IndexMetaDataUtils {
      */
     public static Collection<QualifiedTable> getTableNames(final 
ShardingSphereDatabase database, final DatabaseType protocolType, final 
Collection<IndexSegment> indexes) {
         Collection<QualifiedTable> result = new LinkedList<>();
-        String schemaName = 
DatabaseTypeFactory.getDefaultSchemaName(protocolType, database.getName());
+        String schemaName = new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(database.getName());
         for (IndexSegment each : indexes) {
             String actualSchemaName = each.getOwner().map(optional -> 
optional.getIdentifier().getValue()).orElse(schemaName);
             
findLogicTableNameFromMetaData(database.getSchema(actualSchemaName),
diff --git 
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/MetaDataRefreshEngine.java
 
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/MetaDataRefreshEngine.java
index f0c8a478c12..69ab2c874a4 100644
--- 
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/MetaDataRefreshEngine.java
+++ 
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/refresher/MetaDataRefreshEngine.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.infra.connection.refresher;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.instance.mode.ModeContextManager;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -64,7 +64,7 @@ public final class MetaDataRefreshEngine {
         Optional<MetaDataRefresher> schemaRefresher = 
TypedSPILoader.findService(MetaDataRefresher.class, 
sqlStatementClass.getSuperclass().getName());
         if (schemaRefresher.isPresent()) {
             String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName()
-                    .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName())).toLowerCase();
+                    .orElseGet(() -> new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())).toLowerCase();
             Collection<String> logicDataSourceNames = 
routeUnits.stream().map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
             schemaRefresher.get().refresh(modeContextManager, database, 
logicDataSourceNames, schemaName, sqlStatementContext.getSqlStatement(), props);
             return;
diff --git 
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/validator/ShardingSphereMetaDataValidateUtils.java
 
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/validator/ShardingSphereMetaDataValidateUtils.java
index 3504cd30e77..f827c39609a 100644
--- 
a/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/validator/ShardingSphereMetaDataValidateUtils.java
+++ 
b/infra/context/src/main/java/org/apache/shardingsphere/infra/connection/validator/ShardingSphereMetaDataValidateUtils.java
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.dialect.exception.syntax.table.NoSuchTableException;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+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;
 
@@ -49,7 +49,7 @@ public final class ShardingSphereMetaDataValidateUtils {
      * @throws NoSuchTableException no such table exception
      */
     public static void validateTableExist(final SQLStatementContext 
sqlStatementContext, final ShardingSphereDatabase database) {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
         ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
 -> database.getSchema(defaultSchemaName));
         for (String each : 
sqlStatementContext.getTablesContext().getTableNames()) {
             if (!EXCLUDE_VALIDATE_TABLES.contains(each.toUpperCase()) && 
!schema.containsTable(each)) {
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
index 892698f9661..62adce18366 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.database.core.type;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
-import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
 
@@ -53,26 +51,4 @@ public final class DatabaseTypeFactory {
     private static boolean matchURLs(final String url, final DatabaseType 
databaseType) {
         return 
databaseType.getJdbcUrlPrefixes().stream().anyMatch(url::startsWith);
     }
-    
-    /**
-     * Get all branch database types.
-     * 
-     * @param databaseType database type
-     * @return all branch database types
-     */
-    public static Collection<DatabaseType> getAllBranchDatabaseTypes(final 
DatabaseType databaseType) {
-        return 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)
-                .stream().filter(each -> 
each.getTrunkDatabaseType().map(optional -> optional == 
databaseType).orElse(false)).collect(Collectors.toList());
-    }
-    
-    /**
-     * Get default schema name.
-     *
-     * @param databaseType database type
-     * @param databaseName database name
-     * @return default schema name
-     */
-    public static String getDefaultSchemaName(final DatabaseType databaseType, 
final String databaseName) {
-        return 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, 
databaseType).getDefaultSchema().orElseGet(() -> null == databaseName ? null : 
databaseName.toLowerCase());
-    }
 }
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
similarity index 56%
copy from 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
copy to 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
index 892698f9661..ef8c7730613 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistry.java
@@ -17,50 +17,28 @@
 
 package org.apache.shardingsphere.infra.database.core.type;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
-import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
 
 import java.util.Collection;
 import java.util.stream.Collectors;
 
 /**
- * Database type factory.
+ * Database type registry.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DatabaseTypeFactory {
+@RequiredArgsConstructor
+public final class DatabaseTypeRegistry {
     
-    /**
-     * Get database type.
-     *
-     * @param url database URL
-     * @return database type
-     */
-    public static DatabaseType get(final String url) {
-        Collection<DatabaseType> databaseTypes = 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class).stream().filter(each
 -> matchURLs(url, each)).collect(Collectors.toList());
-        ShardingSpherePreconditions.checkState(!databaseTypes.isEmpty(), () -> 
new UnsupportedStorageTypeException(url));
-        for (DatabaseType each : databaseTypes) {
-            if (each.getTrunkDatabaseType().isPresent()) {
-                return each;
-            }
-        }
-        return databaseTypes.iterator().next();
-    }
-    
-    private static boolean matchURLs(final String url, final DatabaseType 
databaseType) {
-        return 
databaseType.getJdbcUrlPrefixes().stream().anyMatch(url::startsWith);
-    }
+    private final DatabaseType databaseType;
     
     /**
      * Get all branch database types.
      * 
-     * @param databaseType database type
      * @return all branch database types
      */
-    public static Collection<DatabaseType> getAllBranchDatabaseTypes(final 
DatabaseType databaseType) {
+    public Collection<DatabaseType> getAllBranchDatabaseTypes() {
         return 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)
                 .stream().filter(each -> 
each.getTrunkDatabaseType().map(optional -> optional == 
databaseType).orElse(false)).collect(Collectors.toList());
     }
@@ -68,11 +46,10 @@ public final class DatabaseTypeFactory {
     /**
      * Get default schema name.
      *
-     * @param databaseType database type
      * @param databaseName database name
      * @return default schema name
      */
-    public static String getDefaultSchemaName(final DatabaseType databaseType, 
final String databaseName) {
+    public String getDefaultSchemaName(final String databaseName) {
         return 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, 
databaseType).getDefaultSchema().orElseGet(() -> null == databaseName ? null : 
databaseName.toLowerCase());
     }
 }
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
index 8b5f2cf028e..6c8a02e3e99 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
+++ 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
@@ -17,15 +17,10 @@
 
 package org.apache.shardingsphere.infra.database.core.type;
 
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 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.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 class DatabaseTypeFactoryTest {
@@ -44,28 +39,4 @@ class DatabaseTypeFactoryTest {
     void assertGetDatabaseTypeWithUnrecognizedURL() {
         assertThrows(UnsupportedStorageTypeException.class, () -> 
DatabaseTypeFactory.get("jdbc:not-existed:test"));
     }
-    
-    @Test
-    void assertGetAllBranchDatabaseTypes() {
-        Collection<DatabaseType> actual = 
DatabaseTypeFactory.getAllBranchDatabaseTypes(TypedSPILoader.getService(DatabaseType.class,
 "TRUNK"));
-        assertThat(actual, 
is(Collections.singletonList(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH"))));
-    }
-    
-    @Test
-    void assertGetDefaultSchemaNameWhenDatabaseTypeContainsDefaultSchema() {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "TRUNK");
-        
assertThat(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 "FOO"), is("test"));
-    }
-    
-    @Test
-    void assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchema() {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "BRANCH");
-        
assertThat(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 "FOO"), is("foo"));
-    }
-    
-    @Test
-    void 
assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchemaAndNullDatabaseName()
 {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "BRANCH");
-        
assertNull(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 null));
-    }
 }
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistryTest.java
similarity index 54%
copy from 
infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
copy to 
infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistryTest.java
index 8b5f2cf028e..1609dddf892 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
+++ 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeRegistryTest.java
@@ -26,46 +26,27 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
 
-class DatabaseTypeFactoryTest {
-    
-    @Test
-    void assertGetDatabaseTypeWithTrunkURL() {
-        
assertThat(DatabaseTypeFactory.get("jdbc:trunk://localhost:3306/test").getType(),
 is("TRUNK"));
-    }
-    
-    @Test
-    void assertGetDatabaseTypeWithBranchURL() {
-        
assertThat(DatabaseTypeFactory.get("jdbc:trunk:branch://localhost:3306/test").getType(),
 is("BRANCH"));
-    }
-    
-    @Test
-    void assertGetDatabaseTypeWithUnrecognizedURL() {
-        assertThrows(UnsupportedStorageTypeException.class, () -> 
DatabaseTypeFactory.get("jdbc:not-existed:test"));
-    }
+class DatabaseTypeRegistryTest {
     
     @Test
     void assertGetAllBranchDatabaseTypes() {
-        Collection<DatabaseType> actual = 
DatabaseTypeFactory.getAllBranchDatabaseTypes(TypedSPILoader.getService(DatabaseType.class,
 "TRUNK"));
+        Collection<DatabaseType> actual = new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"TRUNK")).getAllBranchDatabaseTypes();
         assertThat(actual, 
is(Collections.singletonList(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH"))));
     }
     
     @Test
     void assertGetDefaultSchemaNameWhenDatabaseTypeContainsDefaultSchema() {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "TRUNK");
-        
assertThat(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 "FOO"), is("test"));
+        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"TRUNK")).getDefaultSchemaName("FOO"), is("test"));
     }
     
     @Test
     void assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchema() {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "BRANCH");
-        
assertThat(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 "FOO"), is("foo"));
+        assertThat(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH")).getDefaultSchemaName("FOO"), is("foo"));
     }
     
     @Test
     void 
assertGetDefaultSchemaNameWhenDatabaseTypeNotContainsDefaultSchemaAndNullDatabaseName()
 {
-        DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "BRANCH");
-        
assertNull(DatabaseTypeFactory.getDefaultSchemaName(schemaNoSupportDatabaseType,
 null));
+        assertNull(new 
DatabaseTypeRegistry(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH")).getDefaultSchemaName(null));
     }
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index 51ba17c270c..510665e241a 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.driver.executor;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.raw.RawExecutor;
@@ -51,7 +51,7 @@ public final class DriverExecutor implements AutoCloseable {
         regularExecutor = new DriverJDBCExecutor(connection.getDatabaseName(), 
connection.getContextManager(), jdbcExecutor);
         rawExecutor = new RawExecutor(executorEngine, 
connection.getDatabaseConnectionManager().getConnectionContext());
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName());
-        String schemaName = 
DatabaseTypeFactory.getDefaultSchemaName(database.getProtocolType(), 
connection.getDatabaseName());
+        String schemaName = new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(connection.getDatabaseName());
         sqlFederationEngine = new 
SQLFederationEngine(connection.getDatabaseName(), schemaName, 
metaDataContexts.getMetaData(), metaDataContexts.getStatistics(), jdbcExecutor);
         trafficExecutor = new TrafficExecutor();
     }
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
index 96813fd7197..dd7ebc993c9 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
@@ -26,7 +26,7 @@ import 
org.apache.shardingsphere.data.pipeline.core.consistencycheck.result.Data
 import 
org.apache.shardingsphere.data.pipeline.core.exception.data.PipelineTableDataConsistencyCheckLoadingFailedException;
 import 
org.apache.shardingsphere.data.pipeline.core.exception.data.UnsupportedCRC32DataConsistencyCalculateAlgorithmException;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.util.spi.annotation.SPIDescription;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
@@ -83,7 +83,7 @@ public final class 
CRC32MatchDataConsistencyCalculateAlgorithm extends AbstractD
         Collection<DatabaseType> result = new LinkedList<>();
         DatabaseType supportedDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
         result.add(supportedDatabaseType);
-        
result.addAll(DatabaseTypeFactory.getAllBranchDatabaseTypes(supportedDatabaseType));
+        result.addAll(new 
DatabaseTypeRegistry(supportedDatabaseType).getAllBranchDatabaseTypes());
         return result;
     }
     
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
index a3974e9f082..324bae0672b 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -181,7 +181,7 @@ public final class SingleRule implements DatabaseRule, 
DataNodeContainedRule, Ta
     
     private Collection<QualifiedTable> getQualifiedTables(final 
ShardingSphereDatabase database, final DatabaseType databaseType, final 
Collection<SimpleTableSegment> tableSegments) {
         Collection<QualifiedTable> result = new LinkedList<>();
-        String schemaName = 
DatabaseTypeFactory.getDefaultSchemaName(databaseType, database.getName());
+        String schemaName = new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(database.getName());
         for (SimpleTableSegment each : tableSegments) {
             String actualSchemaName = each.getOwner().map(optional -> 
optional.getIdentifier().getValue()).orElse(schemaName);
             result.add(new QualifiedTable(actualSchemaName, 
each.getTableName().getIdentifier().getValue()));
diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
index 9fbd08e6c04..b0d83cf1e50 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
@@ -22,7 +22,7 @@ import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRe
 import 
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionCreateUpdater;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.exception.InvalidDataNodesFormatException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
@@ -51,7 +51,7 @@ public final class LoadSingleTableStatementUpdater implements 
RuleDefinitionCrea
     
     @Override
     public void checkSQLStatement(final ShardingSphereDatabase database, final 
LoadSingleTableStatement sqlStatement, final SingleRuleConfiguration 
currentRuleConfig) {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(database.getProtocolType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
         checkDuplicatedTables(database, sqlStatement, defaultSchemaName);
         checkStorageUnits(database, sqlStatement);
         checkActualTableExist(database, sqlStatement, defaultSchemaName);
diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableStatementUpdater.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableStatementUpdater.java
index 55488e22046..4ddbc7c7db4 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableStatementUpdater.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/UnloadSingleTableStatementUpdater.java
@@ -22,7 +22,7 @@ import 
org.apache.shardingsphere.dialect.exception.syntax.table.NoSuchTableExcep
 import 
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
 import 
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionAlterUpdater;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
@@ -76,7 +76,7 @@ public final class UnloadSingleTableStatementUpdater 
implements RuleDefinitionAl
     }
     
     private Collection<String> getAllTableNames(final ShardingSphereDatabase 
database) {
-        String defaultSchemaName = 
DatabaseTypeFactory.getDefaultSchemaName(database.getProtocolType(), 
database.getName());
+        String defaultSchemaName = new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
         return 
database.getSchema(defaultSchemaName).getTables().values().stream().map(ShardingSphereTable::getName).collect(Collectors.toList());
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 31e8070c052..382d92a53bf 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext;
@@ -103,7 +103,7 @@ public final class ProxySQLExecutor {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
         String databaseName = 
databaseConnectionManager.getConnectionSession().getDatabaseName();
         String schemaName = 
queryContext.getSqlStatementContext().getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(queryContext.getSqlStatementContext().getDatabaseType(),
 databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(queryContext.getSqlStatementContext().getDatabaseType()).getDefaultSchemaName(databaseName));
         sqlFederationEngine = new SQLFederationEngine(databaseName, 
schemaName, metaDataContexts.getMetaData(), metaDataContexts.getStatistics(), 
jdbcExecutor);
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
index a871bc1d76f..071840c96cd 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
@@ -21,7 +21,7 @@ import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.dialect.exception.syntax.database.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.dialect.exception.syntax.database.UnknownDatabaseException;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowTableMetaDataStatement;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
@@ -48,7 +48,7 @@ public final class ShowTableMetaDataExecutor implements 
ConnectionSessionRequire
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereMetaData metaData, final ConnectionSession connectionSession, 
final ShowTableMetaDataStatement sqlStatement) {
         String databaseName = getDatabaseName(connectionSession, sqlStatement);
-        String defaultSchema = 
DatabaseTypeFactory.getDefaultSchemaName(connectionSession.getProtocolType(), 
connectionSession.getDatabaseName());
+        String defaultSchema = new 
DatabaseTypeRegistry(connectionSession.getProtocolType()).getDefaultSchemaName(connectionSession.getDatabaseName());
         ShardingSphereSchema schema = 
ProxyContext.getInstance().getDatabase(databaseName).getSchema(defaultSchema);
         return schema.getAllTableNames().stream().filter(each -> 
sqlStatement.getTableNames().contains(each))
                 .map(each -> buildTableRows(databaseName, schema, 
each)).flatMap(Collection::stream).collect(Collectors.toList());
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataUpdater.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataUpdater.java
index fdd6e4bb902..8500bea1dc0 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataUpdater.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetaDataUpdater.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.dialect.exception.syntax.database.UnknownDataba
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.EmptyStorageUnitException;
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.RefreshTableMetaDataStatement;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -80,9 +80,7 @@ public final class RefreshTableMetaDataUpdater implements 
ConnectionSessionRequi
     }
     
     private String getSchemaName(final String databaseName, final 
RefreshTableMetaDataStatement sqlStatement, final ConnectionSession 
connectionSession) {
-        return sqlStatement.getSchemaName().isPresent()
-                ? sqlStatement.getSchemaName().get()
-                : 
DatabaseTypeFactory.getDefaultSchemaName(connectionSession.getProtocolType(), 
databaseName);
+        return sqlStatement.getSchemaName().isPresent() ? 
sqlStatement.getSchemaName().get() : new 
DatabaseTypeRegistry(connectionSession.getProtocolType()).getDefaultSchemaName(databaseName);
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
index d9322c9c340..f1e537b1d75 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
@@ -31,7 +31,7 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
@@ -106,7 +106,7 @@ public final class PreviewExecutor implements 
ConnectionSessionRequiredRULExecut
         ShardingSpherePreconditions.checkState(database.isComplete(), () -> 
new RuleNotExistedException(connectionSession.getDatabaseName()));
         ConfigurationProperties props = 
metaDataContexts.getMetaData().getProps();
         String schemaName = 
queryContext.getSqlStatementContext().getTablesContext().getSchemaName()
-                .orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(database.getProtocolType(), 
databaseName));
+                .orElseGet(() -> new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
         SQLFederationEngine sqlFederationEngine = new 
SQLFederationEngine(databaseName, schemaName, metaDataContexts.getMetaData(), 
metaDataContexts.getStatistics(),
                 new 
JDBCExecutor(BackendExecutorContext.getInstance().getExecutorEngine(), 
connectionSession.getConnectionContext()));
         Collection<ExecutionUnit> executionUnits = 
isUseFederation(queryContext, metaDataContexts, connectionSession, 
sqlFederationEngine)
diff --git 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
index 380e2a093ae..442a0d441c1 100644
--- 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
+++ 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
@@ -35,7 +35,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+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.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -164,7 +164,7 @@ public final class MySQLComStmtPrepareExecutor implements 
CommandExecutor {
         String databaseName = 
sqlStatementContext.getTablesContext().getDatabaseName().orElseGet(connectionSession::getDefaultDatabaseName);
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName);
         return 
sqlStatementContext.getTablesContext().getSchemaName().map(database::getSchema)
-                .orElseGet(() -> 
database.getSchema(DatabaseTypeFactory.getDefaultSchemaName(sqlStatementContext.getDatabaseType(),
 database.getName())));
+                .orElseGet(() -> database.getSchema(new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())));
     }
     
     private int calculateColumnDefinitionFlag(final ShardingSphereColumn 
column) {
diff --git 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
index 669b54d772a..25b1670dee5 100644
--- 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
+++ 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java
@@ -29,7 +29,7 @@ import 
org.apache.shardingsphere.dialect.postgresql.exception.metadata.ColumnNot
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
@@ -168,7 +168,7 @@ public final class PostgreSQLComDescribeExecutor implements 
CommandExecutor {
     private ShardingSphereTable getTableFromMetaData(final String 
databaseName, final InsertStatement insertStatement, final String 
logicTableName) {
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getDatabase(databaseName);
         String schemaName = insertStatement.getTable().getOwner().map(optional 
-> optional.getIdentifier()
-                .getValue()).orElseGet(() -> 
DatabaseTypeFactory.getDefaultSchemaName(database.getProtocolType(), 
databaseName));
+                .getValue()).orElseGet(() -> new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(databaseName));
         return database.getSchema(schemaName).getTable(logicTableName);
     }
     
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index 44968982327..c4fb0b75141 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDa
 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.database.core.type.DatabaseTypeFactory;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -121,7 +121,7 @@ public abstract class SQLRewriterIT {
         Map<String, DatabaseType> storageTypes = 
createStorageTypes(databaseConfig, databaseType);
         ShardingSphereResourceMetaData resourceMetaData = 
mock(ShardingSphereResourceMetaData.class);
         when(resourceMetaData.getStorageTypes()).thenReturn(storageTypes);
-        String schemaName = 
DatabaseTypeFactory.getDefaultSchemaName(databaseType, 
DefaultDatabase.LOGIC_NAME);
+        String schemaName = new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(DefaultDatabase.LOGIC_NAME);
         SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine(TypedSPILoader.getService(DatabaseType.class, 
testParams.getDatabaseType()),
                 sqlParserRule.getSqlStatementCache(), 
sqlParserRule.getParseTreeCache(), sqlParserRule.isSqlCommentParseEnabled());
         SQLStatement sqlStatement = 
sqlStatementParserEngine.parse(testParams.getInputSQL(), false);
@@ -130,7 +130,6 @@ public abstract class SQLRewriterIT {
         ShardingSphereDatabase database = new 
ShardingSphereDatabase(schemaName, databaseType, resourceMetaData, 
databaseRuleMetaData, mockSchemas(schemaName));
         Map<String, ShardingSphereDatabase> databases = new HashMap<>(2, 1F);
         databases.put(schemaName, database);
-        
         ShardingSphereRuleMetaData globalRuleMetaData = new 
ShardingSphereRuleMetaData(createGlobalRules());
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(ShardingSphereResourceMetaData.class), 
globalRuleMetaData, mock(ConfigurationProperties.class));
         SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData, 
schemaName).bind(sqlStatement, Collections.emptyList());

Reply via email to