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());